如何在 OMNeT++ 上检查接收到的消息类型?
How to check a received message type on OMNeT++?
我在 OMNeT++ 中声明了三种不同的消息类型:
Layer
Ack
Reject
我想要实现的是我网络中的每个节点都可以发送上述任何类型的消息。这样每个消息类型都有自己的变量。但是由于 handleMessage(cMessage*)
函数接受 cMessage*
类型,我需要知道消息的类型才能相应地转换它。
我该怎么做?
这是我的 Layer
消息类型:
message Layer {
int layer;
simtime_t timeFrame;
}
您的每种消息类型都由继承自 cMessage
的 class 表示。因此,dynamic_cast
可用于识别消息的类型,例如这样:
void YourClass::handleMessage(cMessage * msg) {
Layer * layer = dynamic_cast<Layer*> (msg);
if (layer != nullptr) {
// received Layer
} else {
Ack* ack = dynamic_cast<Ack*> (msg);
if (ack != nullptr) {
// received Ack
} else {
Reject* rej= dynamic_cast<Reject*> (msg);
if (rej != nullptr) {
// received Reject
}
}
}
我在 OMNeT++ 中声明了三种不同的消息类型:
Layer
Ack
Reject
我想要实现的是我网络中的每个节点都可以发送上述任何类型的消息。这样每个消息类型都有自己的变量。但是由于 handleMessage(cMessage*)
函数接受 cMessage*
类型,我需要知道消息的类型才能相应地转换它。
我该怎么做?
这是我的 Layer
消息类型:
message Layer {
int layer;
simtime_t timeFrame;
}
您的每种消息类型都由继承自 cMessage
的 class 表示。因此,dynamic_cast
可用于识别消息的类型,例如这样:
void YourClass::handleMessage(cMessage * msg) {
Layer * layer = dynamic_cast<Layer*> (msg);
if (layer != nullptr) {
// received Layer
} else {
Ack* ack = dynamic_cast<Ack*> (msg);
if (ack != nullptr) {
// received Ack
} else {
Reject* rej= dynamic_cast<Reject*> (msg);
if (rej != nullptr) {
// received Reject
}
}
}