2017-03-13 5 views
3

Veins를 처음 사용하고 이전에 WSM 패킷이 수신되었는지 감지하는 메커니즘을 구현하려고했습니다. 패킷을 식별하기 위해 "psid"를 주 변수로 사용하고 있습니다. 정확합니까?Veins의 중복 확인

이 코드 유형이 작동합니까? :

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