【发布时间】:2020-09-09 18:03:57
【问题描述】:
我在 Omnet++ 中有一个简单的网络,其中较低级别的网络在一个门 (inLower) 中接收,同级网络数据在另一个门 (inMid)。
我正在使用 Omnet++ 的 handleMessage() 方法在收到消息时触发一些操作。有没有办法区分哪个输入门收到了消息?我知道我可以指定消息通过哪个输出门发送。
【问题讨论】:
标签: networking simulation omnet++
我在 Omnet++ 中有一个简单的网络,其中较低级别的网络在一个门 (inLower) 中接收,同级网络数据在另一个门 (inMid)。
我正在使用 Omnet++ 的 handleMessage() 方法在收到消息时触发一些操作。有没有办法区分哪个输入门收到了消息?我知道我可以指定消息通过哪个输出门发送。
【问题讨论】:
标签: networking simulation omnet++
您可以使用cMessage::getArrivalGate() 获取给定cMessage 的到达门。
void handleMessage(cMessage *msg) {
cGate *arrivalGate = msg->getArrivalGate();
if (arrivalGate == gate("inMid")) {
// do stuff
} else {
// or y'know
}
}
上面的例子假设inMid 是一个标量门的字符串标识符。如果你的门是矢量门,你可以先检查它是否有任何门(gateSize("inMid") > 0),然后获取它的基础门(cGate inMidBaseGate = gate("inMid", 0);)。然后,您可以获得其基本 ID (auto inMidBaseId = inMidBaseGate.getBaseId()),您可以将其与到达门及其基本 ID (inMidBaseId == arrivalGate->getBaseId()) 进行比较。
【讨论】:
inMid的门是向量门?您可以使用cGate::getBaseId() 并将其与cMessage::getArrivalGate()->getBaseId 进行比较,以检查它是否存在矢量门的任何门部分。