从同一源节点使用 Omnet++ 生成周期性消息

Generate perodic messages with Omnet++ from same source node

我有一个给定的网络,其节点具有这两种方法:

void Txc13::initialize()
{
    // Module 0 sends the first message
    if (getIndex() == 0) {
        // Boot the process scheduling the initial message as a self-message.
        TicTocMsg13 *msg = generateMessage();
        simtime_t delay = par("delayTime");
        scheduleAt(simTime()+delay, msg);
    }
}

void Txc13::handleMessage(cMessage *msg)
{
    // we do some casting to access the fields inside the message
    TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);

    if (ttmsg->getDestination() == getIndex()) {
        // Message arrived.
        bubble("ARRIVED!");
        delete ttmsg;
    }
    else {
        // We need to forward the message.
        forwardMessage(ttmsg);
    }
}

这很好用。一旦离开节点 0 (getIndex()==0) 的消息到达其预定目的地,模拟就会结束。

现在我愿意在 delay.

之后触发几条离开 node0 的消息

延迟呈指数分布network.tic[*].delayTime = exponential(10s)

如何从同一个节点触发多条消息?

谢谢!

好的,我想我明白了。这是这两种方法的代码。在 initialize 方法中,我创建了一个 event 消息,我最初在 t=0.

触发
void Txc13::initialize()
{
    // Create the event object we'll use for timing -- just any ordinary message.
    event = new cMessage("event");
    // Module 0 sends the first message
    if (getIndex() == 0) {
        scheduleAt(0.0, event);
    }
}

handleMessage 方法中,我检查传入消息是否为 event。如果是这样,我会等待 simtime_t delay = par("delayTime") 呈指数分布,然后发送另一条自我消息并转发消息本身。

因为我希望所有消息都从 node0 开始,所以我还使用 getIndex() == 0 进行检查。

void Txc13::handleMessage(cMessage *msg)
{
    if (msg == event and getIndex() == 0){
        TicTocMsg13 *msg = generateMessage();
        simtime_t delay = par("delayTime");
        scheduleAt(simTime()+delay, event);
        forwardMessage(msg);
    }
    else {
        // we do some casting to access the fields inside the message
        TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);

        if (ttmsg->getDestination() == getIndex()) {
            // Message arrived.
            //EV << "Message " << ttmsg << " arrived after " << ttmsg->getHopCount() << " hops.\n";
            bubble("ARRIVED!");
            delete ttmsg;

            // Generate another one.
            //EV << "Generating another message: ";
            //TicTocMsg13 *newmsg = generateMessage();
            //EV << newmsg << endl;
            //forwardMessage(newmsg);
        }
        else {
            // We need to forward the message.
            forwardMessage(ttmsg);
        }
    }
}

有了这个,我得到了以下 elog,您可以在其中看到每个事件后转发一条消息。