2017-03-13 20 views
3

で重複をチェックし、WSMパケットが以前に受信されたかどうかを検出するメカニズムを実装しようとしています。私はパケットを識別するための主な変数として "psid"を使用しています - それは正しいですか?は、私が静脈に新しいです静脈

このタイプのコードは機能しますか? :

bool MyVeinsApp::msgReceivedBefore(int psid){ 
    /* 
    This function will be used to determine if the message was received before 
    and should be discarded or processed further 
    */ 

    if(msg_log.find(psid) == msg_log.end()){ 
    return false 
    } 
    else { 
    return true; 
    } 

} 

ここでmsg.logはpsidに基づくWSMを格納するC++データ構造です。

答えて

2

psidは、使用しているサービスの識別子であり(WaveShortMessage.msg参照)、同じサービスのメッセージで一意ではありません。メッセージを区別するために、一意のメッセージ識別子が必要です。

msg->getId() 

UPDATEを::

単純なアプローチはOMNeT ++内のすべてのモジュールが取得するid使用することです。このIDは、同じコンテンツを持つすべてのメッセージの中で一意であることに注意してください(下のコメントを参照以下)。

+2

これは100%正確ではありません。 Veinsは内部的にメッセージを複製するので、すべての車は異なるIDのメッセージを受信しますが、メッセージは実際には同じブロードキャストです。 このようにするには、一意の識別子でメッセージを拡張し、シミュレーション環境から 'getUniqueNumber()'を使って値を割り当てる必要があるでしょう。 – floxyz

関連する問題