как получить ID кадра в жилах класса BaseWaveApplLayer

Я реализую функцию ACK для отправки RSU и пытаюсь получить frameID в классе BaseWaveApplLayer. У него есть объект cMessage, но я не могу получить правильный freamID. Я пытался использовать messageId, но он отличается от отправленного с узлов. Также тестировал getEncapsulationId(), но он тоже другой. Как я могу получить frameId, отправленное отправителем?

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

person Sam1324    schedule 19.04.2017    source источник


Ответы (1)


Прежде всего, вы должны установить идентификатор на стороне отправителя, тогда вы сможете получить доступ к идентификатору, как на стороне получателя. Для этого вам придется расширить определение сообщения в файле *.msg, добавив новое поле для хранения идентификатора вашего приложения. Например, это можно назвать myAppsId.

Обратите внимание, как этот реализация расширяет WaveShortMessage новыми полями.

Вы можете использовать тот же подход, чтобы расширить WaveShortMessage и создать новый тип сообщения для вашего приложения с нужными полями. Или вы можете напрямую изменить определение файла WaveShortMessage.

Затем в основном используйте функции set() и get() для вновь определенного поля на стороне отправки и получения соответственно.

Вот полезное решение для другой цели, но то же самое относится и к вам.

person user4786271    schedule 25.04.2017
comment
Спасибо, я попробую это. - person Sam1324; 25.04.2017
comment
@ Sam1324 Sam1324, если решение работает, примите его для дальнейшего использования. - person user4786271; 26.04.2017