Как проверить тип полученного сообщения на OMNeT ++? - PullRequest
0 голосов
/ 08 ноября 2019

Я объявил три разных типа сообщений в OMNeT ++:

  • Layer
  • Ack
  • Reject

Чего я хочу добиться, так это чтобы каждый узел в моей сети мог отправлять сообщения любого типа, упомянутые выше. Так что каждый тип сообщения имеет свои переменные. Но так как функция handleMessage(cMessage*) принимает тип cMessage*, мне нужно знать тип сообщения, чтобы иметь возможность его соответственно преобразовать.

Как мне это сделать?

Вотмой Layer тип сообщения:

message Layer {
    int layer;
    simtime_t timeFrame;
}

1 Ответ

1 голос
/ 09 ноября 2019

Каждый тип вашего сообщения представлен классом, который наследуется от cMessage. Следовательно, 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

     }
  }

}
...