cnullmessageprot.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CNULLMESSAGEPROT_H__
00022 #define __CNULLMESSAGEPROT_H__
00023
00024 #include "cparsimprotocolbase.h"
00025 #include "cmessage.h"
00026
00027 NAMESPACE_BEGIN
00028
00029
00030 class cCommBuffer;
00031 class cNMPLookahead;
00032
00033
00041 class SIM_API cNullMessageProtocol : public cParsimProtocolBase
00042 {
00043 protected:
00044 struct PartitionInfo
00045 {
00046 cMessage *eitEvent;
00047 cMessage *eotEvent;
00048 simtime_t lastEotSent;
00049 };
00050
00051
00052 int numSeg;
00053 PartitionInfo *segInfo;
00054
00055
00056 double laziness;
00057
00058
00059 enum
00060 {
00061 MK_PARSIM_EIT = MK_PARSIM_BEGIN - 1,
00062 MK_PARSIM_RESENDEOT = MK_PARSIM_BEGIN - 2
00063 };
00064
00065 bool debug;
00066
00067 cNMPLookahead *lookaheadcalc;
00068
00069 protected:
00070
00071 virtual void processReceivedBuffer(cCommBuffer *buffer, int tag, int sourceProcId);
00072
00073
00074 virtual void processReceivedEIT(int sourceProcId, simtime_t eit);
00075
00076
00077 virtual void sendNullMessage(int procId, simtime_t now);
00078
00079
00080 virtual void rescheduleEvent(cMessage *msg, simtime_t t);
00081
00082 public:
00086 cNullMessageProtocol();
00087
00091 virtual ~cNullMessageProtocol();
00092
00097 virtual void setContext(cSimulation *sim, cParsimPartition *seg, cParsimCommunications *co);
00098
00106 void setLaziness(double d) {laziness = d;}
00107
00111 double getLaziness() {return laziness;}
00112
00116 virtual void startRun();
00117
00121 virtual void endRun();
00122
00126 virtual cMessage *getNextEvent();
00127
00133 virtual void processOutgoingMessage(cMessage *msg, int procId, int moduleId, int gateId, void *data);
00134 };
00135
00136 NAMESPACE_END
00137
00138
00139 #endif