如何在OMNeT ++中将cMessage转换为cPacket?

时间:2015-12-08 01:32:42

标签: omnet++

我需要帮助将cMessage转换为cPacket类型的MsgData。

我的MsgData是我创建的消息:

packet MsgData {
     string origem;
    int cont;
    double payload;
    double timestamp;
}

我使用了static_cast函数,但它不起作用。我尝试使用dynamic_cast并且也不起作用。

我的代码:

void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
     ASSERT(check_and_cast<MsgData *>(msg));
     MsgData *trafficMsg = static_cast<MsgData *>(msg);
}

有谁知道我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

你应该尝试直接使用check_cast&lt;&gt;(),如果你的数据包不是预期类型之一,它会产生错误,就像ASSERT一样。

var response = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Neuschwanstein%20Castle&redirects="); ;

var responseJson = JsonConvert.DeserializeObject<RootObject>(response);
var firstKey = responseJson.query.pages.First().Key;
var extract = responseJson.query.pages[firstKey].extract;

答案 1 :(得分:1)

ASSERT不是必需的,因为check_and_cast实际上也是如此。不过,我建议使用dynamic_cast进行额外检查。

void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
    if (dynamic_cast<MsgData *>(msg)) {
        MsgData  * trafficMsg = check_and_cast<MsgData *>(msg);
        int a = trafficMsg->getCont();
    } else {
        EV << "Message " << msg << " is not a MsgData packet" << endl;
        // other checking of msg
    }
}