Я должен построить немного другой набор сообщений. Таким образом, мне пришлось отойти от DemoBaseAppLayer и использовать непосредственно BaseApplLayer. Мои файлы ned почти нормальны, как предоставлено Vienes. Я должен построить App Ned, Подержанный автомобиль и Сценарий из Viens. Я подписываюсь на BaseMobility :: mobilityStateChangedSignal. Такие методы, как handlePositionUpdate и handleSelfMessage, работают нормально. Они отлично работают. Они создают сообщение и отправляют его.
Однако handleLowerMessage не активируется ни разу. Что я мог упустить? Ваши мысли будут оценены.
Минимальный код Reproducibale
`
#ifndef BSMAPP_H_
#define BSMAPP_H_
#include <map>
#include "veins/modules/world/annotations/AnnotationManager.h"
#include "veins/base/modules/BaseApplLayer.h"
#include "veins/modules/utility/Consts80211p.h"
#include "veins/modules/messages/BaseFrame1609_4_m.h"
#include "veins/base/connectionManager/ChannelAccess.h"#include"veins/modules/mac/ieee80211p/DemoBaseApplLayerToMac1609_4Interface.h"
#include "veins/modules/mobility/traci/TraCIMobility.h"
#include "veins/modules/mobility/traci/TraCICommandInterface.h"
namespace veins {
using veins::AnnotationManager;
using veins::AnnotationManagerAccess;
using veins::TraCICommandInterface;
using veins::TraCIMobility;
using veins::TraCIMobilityAccess;
//using namespace Veins;
class BSMApp: public BaseApplLayer {
public:
BSMApp();
virtual ~BSMApp() override;
void initialize(int stage) override;
void finish() override;
void receiveSignal(cComponent* source, simsignal_t signalID, cObject* obj,
cObject* details) override;
enum BaseApplMessageKinds {
SEND_BEACON_EVT,
//SEND_WSA_EVT
};
protected:
bool isSelfMsgSent;
void handleSelfMsg(cMessage* msg) override;
virtual void handleLowerMsg(cMessage* msg) override;
virtual simtime_t computeAsynchronousSendingTime(simtime_t interval, ChannelType chantype);
cMessage* sendBeaconEvt;
virtual void handlePositionUpdate(cObject* obj) ;
TraCIMobility* mobility;
TraCICommandInterface* traci;
TraCICommandInterface::Vehicle* traciVehicle;
AnnotationManager* annotations;
DemoBaseApplLayerToMac1609_4Interface* mac;
}`
и cc файл
`using namespace veins;
Define_Module(veins::BSMApp);
void BSMApp::receiveSignal(cComponent* source, simsignal_t signalID, cObject* obj,
cObject* details){
//EV_DEBUG << "BSMApp::receiveSignal start " << endl;
EV << "BSMApp::receiveSignal start " << endl;
cout<< "BSMApp::receiveSignal start"<<endl;
Enter_Method_Silent();
if (signalID == BaseMobility::mobilityStateChangedSignal) {
handlePositionUpdate(obj);
EV_DEBUG << "BSMApp::receiveSignal updated position " << endl;
}else{
EV_DEBUG << "BSMApp::receiveSignal NOT of type mobility state change signal " << endl;
}
EV_DEBUG << "BSMApp::receiveSignal end " << endl;
}
void BSMApp::initialize(int stage){
//Almost same as Demo App
}
void BSMApp::handleLowerMsg(cMessage* msg) {
cout << "BSMApp::handleLowerMsg start " << endl;
}
void BSMApp::handleSelfMsg(cMessage* msg) {
cout << "BSMApp::handleSelfMsg start " << endla
isSelfMsgSent=true;;
}
void BSMApp::handlePositionUpdate(cObject* obj) {
if(!isSelfMsgSent){
cout<<"Trying to set isSelfMsgSent"<<endl;
this->handleSelfMsg(sendBeaconEvt);
}
}`
Спасибо. С уважением, SJ