如何向指定节点发回消息?
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());
我在 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());