#include <stdio.h>
#include <string.h>
#include <omnetpp.h>
class Tic7 : public cSimpleModule
{
protected:
double timeout;
cMessage *timeoutEvent;
public:
Module_Class_Members(Tic7, cSimpleModule, 0);
virtual void initialize();
virtual void handleMessage(cMessage *msg);
};
Define_Module(Tic7);
void Tic7::initialize()
{
timeout = 1.0;
timeoutEvent = new cMessage("timeoutEvent");
ev << "Sending initial message\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
scheduleAt(simTime()+timeout, timeoutEvent);
}
void Tic7::handleMessage(cMessage *msg)
{
if (msg==timeoutEvent)
{
ev << "Timeout expired, resending message and restarting timer\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
scheduleAt(simTime()+timeout, timeoutEvent);
}
else
{
ev << "Timer cancelled.\n";
cancelEvent(timeoutEvent);
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
scheduleAt(simTime()+timeout, timeoutEvent);
}
}
class Toc7 : public cSimpleModule
{
public:
Module_Class_Members(Toc7, cSimpleModule, 0);
virtual void handleMessage(cMessage *msg);
};
Define_Module(Toc7);
void Toc7::handleMessage(cMessage *msg)
{
if (uniform(0,1) < 0.1)
{
ev << "\"Losing\" message.\n";
bubble("message lost");
delete msg;
}
else
{
ev << "Sending back same message as acknowledgement.\n";
send(msg, "out");
}
}