wsm消息发送者的外部ID

The external ID of wsm message sender

我正在使用 OMNET 5.0、SUMO-0.25.0 和 VEINS-4.4。当车辆收到消息时; onData() 被调用。我可以使用 mobility->getExternalId() 获取当前车辆的外部 ID;但是我怎么知道 wsm 消息发送者

的外部 ID

initialize()的代码:

void TraCIDemo11p::initialize(int stage) {
    BaseWaveApplLayer::initialize(stage);
    if (stage == 0) {
        mobility = TraCIMobilityAccess().get(getParentModule());
        traci = mobility->getCommandInterface();
        traciVehicle = mobility->getVehicleCommandInterface();
        annotations = AnnotationManagerAccess().getIfExists();
        ASSERT(annotations);
        getExternalID =  mobility->getExternalId();
        sentMessage = false;
        lastDroveAt = simTime();

        findHost()->subscribe(parkingStateChangedSignal, this);
        isParking = false;
        sendWhileParking = par("sendWhileParking").boolValue();
    }
}

onData()的代码:

void TraCIDemo11p::onData(WaveShortMessage* wsm) {
    std::cout << " I am "<< getExternalID  <<"and I received a message from ???? "<<endl;
    findHost()->getDisplayString().updateWith("r=16,green");
    annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), mobility->getPositionAt(simTime()), "blue"));

    if (mobility->getRoadId()[0] != ':') 
          traciVehicle->changeRoute(wsm->getWsmData(), 9999);
    if (!sentMessage) 
          sendMessage(wsm->getWsmData());

}

一辆车可以由两个标识符表示,一个是从 SUMO 获得的(即调用 getExternalId()),另一个是veins之一(通常是myId),调用后在WaveShortMessage中使用的那个getSenderAddress()myId 所以我建议你关注最后一个。

查看这两个文件以更好地了解所使用的标识符和现有方法:"BaseWaveApplLayer.h/.cc" & "WaveShortMessage_m.h/.cc"

希望对您有所帮助。