如何将消息发送回指定节点?

时间:2018-10-10 22:16:39

标签: omnet++

我正在NED中使用inout门。我的网络由以对等方式互连在一起的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应该仅将此消息发送回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());
}

任何人都可以更正此简单代码,以便将消息发送回源代码吗? 非常感谢您。

1 个答案:

答案 0 :(得分:1)

insert INTO aa (data) values (Convert(Numeric, date(),102));

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

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