2017-04-19 3 views
0

私はRSUによって送信されるACK機能を実装しており、をBaseWaveApplLayerクラスに取得しようとしています。それはcMessageオブジェクトを持っていますが、正しいfreamIDを得ることができません。 messageIdを使用しようとしましたが、ノードから送信されたものとは異なります。また、getEncapsulationId()もテストされていますが、これもまた違います。送信者からframeIdを送信するにはどうすればよいですか?BaseWaveApplLayerクラスの静脈でFrame Idを取得する方法

void BaseWaveApplLayer::handleLowerMsg(cMessage* msg) { 
    WaveShortMessage* wsm = dynamic_cast<WaveShortMessage*>(msg); 
    ASSERT(wsm); 
    if (BasicSafetyMessage* bsm = dynamic_cast<BasicSafetyMessage*>(wsm)) { 
     receivedBSMs++; 
     onBSM(bsm); 
    } 
} 

答えて

0

まず、送信者側でIDを設定する必要があります。受信者側でIDにアクセスできるようになります。これを行うには、*.msgファイルのメッセージ定義を拡張して、アプリケーションのIDを格納する新しいフィールドを作成する必要があります。例えば、myAppsIdと呼ぶことができます。

thisの実装では、新しいフィールドをWaveShortMessageに拡張することに注意してください。

同じアプローチを使用してWaveShortMessageを拡張し、目的のフィールドを持つアプリケーションの新しいメッセージタイプを作成することができます。あるいは、WaveShortMessageの定義を直接変更することもできます。

基本的には、それぞれ送受信側の新しく定義されたフィールドにset()get()関数を使用します。

Hereは、異なる目的のための便利な解決策ですが、同じことがあなたに当てはまります。

+0

ありがとう、私はこれを試してみます。 – Sam1324

+0

@ Sam1324解決策が機能する場合は、後で参考にして受け入れてください – user4786271

関連する問題