@Horstinator this is my code : the RSU's application
#ifndef RSUAPP_H_
#define RSUAPP_H_
#include <omnetpp.h>
#include "veins/modules/application/ieee80211p/BaseWaveApplLayer.h"
#include "ttr_m.h"
#include "veins/modules/utility/TimerManager.h"
using namespace omnetpp;
using Veins::TimerManager;
class rsuApp : public BaseWaveApplLayer {
public:
rsuApp();
~rsuApp();
virtual void initialize(int stage);
virtual void finish();
protected:
virtual void onBSM(BasicSafetyMessage* bsm);
virtual void onWSM(WaveShortMessage* wsm);
virtual void onWSA(WaveServiceAdvertisment* wsa);
virtual void handleSelfMsg(cMessage* msg);
virtual void handlePositionUpdate(cObject* obj);
//declaration of the TimerManager instance and the handle
TimerManager timerManager{this};
TimerManager::TimerHandle handle;
};
#endif
.
#include "rsuApp.h"
#include "ttr_m.h"
#include "veins/modules/utility/TimerManager.h"
#include <map>
Define_Module(rsuApp);
rsuApp::rsuApp(){}
void rsuApp::initialize(int stage) {
BaseWaveApplLayer::initialize(stage);
auto ttrTimer = [this](){
Ttr* ttr = new Ttr();
populateWSM(ttr);
sendDown(ttr);
};
auto ttrTimerSpec = Veins::TimerSpecification(ttrTimer).interval(1);
handle=timerManager.create(ttrTimerSpec, "recurring timer");
}
void rsuApp::finish() {
BaseWaveApplLayer::finish();
}
void rsuApp::onWSM(WaveShortMessage* wsm) {
if(strcmp(wsm->getName(),"tip")==0){
findHost()->getDisplayString().updateWith("r=60,red");
//canceling the timer when a wsm message is received
timerManager.cancel(handle);
}
}
void rsuApp::handleSelfMsg(cMessage* msg) {
BaseWaveApplLayer::handleSelfMsg(msg);
timerManager.handleMessage(msg);
}
void rsuApp::onBSM(BasicSafetyMessage* bsm) {}
void rsuApp::onWSA(WaveServiceAdvertisment* wsa) {}
void rsuApp::handlePositionUpdate(cObject* obj) {
BaseWaveApplLayer::handlePositionUpdate(obj);
}
rsuApp::~rsuApp(){}