如何向指定节点发回消息?

How to send back a message to a specified node?

我在 NED 中使用输入输出门。我的网络由 n 个以对等方式互连在一起的简单模块组成。我的问题是: 假设其中一个简单模块收到一条消息。我怎样才能写 'handleMessage()' 以便将消息发送回消息源(相关门)?如果我需要使用 'getArrivalGateId()' 请让我知道我该如何使用它?此方法无效:

'send(msg, "gate$o",getArrivalGateId());'

Ned代码如下:

 simple TX1
{
    gates:
        inout gate[];
}

network Network
{
    submodules:
        drain: TX1 {
            @display("p=143,104");
        }
        tic: TX1 {
            @display("p=143,23");
        }
        pong: TX1 {
            @display("p=235,104");
        }
        toc: TX1 {
            @display("p=143,185");
        }
        ping: TX1 {
            @display("p=47,104");
        }
    connections:
        tic.gate++ <--> drain.gate++;
        pong.gate++ <--> drain.gate++;
        drain.gate++ <--> toc.gate++;
        drain.gate++ <--> ping.gate++;
}

tic 模块向 drain 发送消息,drain 应该只将此消息发回给 tic(而不是其他模块)。源文件如下:

    #include <stdio.h>
#include <string.h>
#include <omnetpp.h>
using namespace omnetpp;


class TX1 : public cSimpleModule
{

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

Define_Module(TX1);

void TX1::initialize()
{
    if (strcmp("tic", getName()) == 0)
    {
        cMessage *msg = new cMessage("Message");
      // int n = gateSize("gate");
                         send(msg, "gate$o", 0);
               }
}

void TX1::handleMessage(cMessage *msg)
{
    send(msg, "gate$o",msg->getArrivalGateId());
}

任何人都可以更正这个简单的代码以便将消息发送回消息来源吗? 在此先感谢您。

send(msg, "gate$o",msg->getArrivalGateId());

对于此调用,您必须指定 门索引(不是门 ID)作为第三个参数 (send()),因此正确的调用应该是:

send(msg, "gate$o",msg->getArrivalGate()->getIndex());