невозможно удалить сообщение, когда достигает места назначения в omnet ++? - PullRequest
0 голосов
/ 01 декабря 2019

Я новичок в OMNeT ++, и я хочу создать простой механизм широковещания, в котором начальный узел отправляет сообщение и передает его всем узлам, соединенным в топологии сетки. Когда msg достигает пункта назначения, оно будет удалено и больше не будет транслироваться. Постоянно я работаю над этим с 2-х дней, следуя его официальной документации. Мой код успешно смоделирован. Но он не удаляет сообщение, когда достигает пункта назначения. Я начинаю с 25 узлов (компьютер), в которых исходный узел - computer0, а конечный узел - computer24. Скажи мне, где я не прав. Ниже мой исходный код:

#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

class computer : public cSimpleModule
{
protected:
    virtual void forwardMessage(cMessage *msg);
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

Define_Module(computer);

void computer::initialize()
{
    if (getIndex() == 0) {

        char msgname[20];
        sprintf(msgname, "msg-%d", getIndex());
        cMessage *msg = new cMessage(msgname);
        scheduleAt(0.0, msg);
    }
}

void computer::handleMessage(cMessage *msg)
{
    if (getIndex() == 24) {

            EV << "Message " << msg << " arrived.\n";
            delete msg;
        }
        else {

            forwardMessage(msg);
        }
    }

void computer::forwardMessage(cMessage *msg)
{

    int n = gateSize("gate");
    int k = intuniform(0, n-1);

    EV << "Forwarding message " << msg << " on gate[" << k << "]\n";
    send(msg, "gate$o", k);
}

оснастка моделирования: https://i.stack.imgur.com/a4JRQ.png

...