Как отправить одно сообщение следующему модулю после получения всех сообщений от предыдущего модуля в OMNET ++ - PullRequest
0 голосов
/ 27 мая 2019

нужна ваша помощь.

У меня есть три модуля Модуль A, Модуль B и Модуль C.

Модуль A отправляет 20 сообщений модулю B. Я хочу отправить один пакет модулю C после получения всех 20 сообщений от модуля A. Как я могу справиться с этой ситуацией на handleMessage?

В данный момент он работает как петля. при каждом прибытии отправка сообщения. мне нужно собрать все сообщения из предыдущего модуля, собрать из них данные, подготовить одно сообщение и отправить одно сообщение следующему модулю.

=============================================== ==

Спасибо 000102 ,

ваше первое решение работает отлично. Я только борюсь со вторым решением. поэтому, пожалуйста, помогите мне в этом. Пожалуйста, проверьте код ниже и дайте мне знать, где я не прав.

class ModuleB: public cSimpleModule
{
protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
private:
    bool sentMessage = false;
    simtime_t lastMessageReceivedAt;
    simtime_t timer;
};

void ModuleB::initialize()
{

}

void ModuleB::handleMessage(cMessage *msg)
{
       if(simTime() - lastMessageReceivedAt >= timer && sentMessage == false)
            {
                 EV << counter << " messages to receive before sending.\n";
                // Data collection
            }
            else
            {
                lastMessageReceivedAt = simTime();
                EV << " Send message to Module C.\n";
                cMessage *newMsg = new cMessage("Message")
                send(newMsg, "out");
                sentMessage = true;
            }
}

1 Ответ

2 голосов
/ 28 мая 2019

Я думаю, вы ищете что-то вроде этого:

class ModuleB : public cSimpleModule {
  private:
    int counter;

  protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

void ModuleB::initialize() {
    counter = 20;
}

void ModuleB::handleMessage(cMessage *msg) {
    counter--;
    if (counter > 0) {
        EV << counter << " messages to receive before sending.\n";
        // Data collection
    }
    else {
        EV << " Send message to Module C.\n";
        cMessage *newMsg = new cMessage("Message");
        send(newMsg, "out");
    }
}
...