00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CNULLMESSAGEPROT_H__
00021 #define __CNULLMESSAGEPROT_H__
00022
00023 #include "cparsimprotocolbase.h"
00024 #include "cmessage.h"
00025
00026
00027 class cCommBuffer;
00028 class cNMPLookahead;
00029
00030
00038 class cNullMessageProtocol : public cParsimProtocolBase
00039 {
00040 protected:
00041 struct PartitionInfo
00042 {
00043 cMessage *eitEvent;
00044 cMessage *eotEvent;
00045 double lastEotSent;
00046 };
00047
00048
00049 int numSeg;
00050 PartitionInfo *segInfo;
00051
00052
00053 double laziness;
00054
00055
00056 enum
00057 {
00058 MK_PARSIM_EIT = MK_PARSIM_BEGIN - 1,
00059 MK_PARSIM_RESENDEOT = MK_PARSIM_BEGIN - 2
00060 };
00061
00062 bool debug;
00063
00064 cNMPLookahead *lookaheadcalc;
00065
00066 protected:
00067
00068 virtual void processReceivedBuffer(cCommBuffer *buffer, int tag, int sourceProcId);
00069
00070
00071 virtual void processReceivedEIT(int sourceProcId, simtime_t eit);
00072
00073
00074 virtual void sendNullMessage(int procId, simtime_t now);
00075
00076
00077 virtual void rescheduleEvent(cMessage *msg, simtime_t t);
00078
00079 public:
00083 cNullMessageProtocol();
00084
00088 virtual ~cNullMessageProtocol();
00089
00094 virtual void setContext(cSimulation *sim, cParsimPartition *seg, cParsimCommunications *co);
00095
00103 void setLaziness(double d) {laziness = d;}
00104
00108 double getLaziness() {return laziness;}
00109
00113 virtual void startRun();
00114
00118 virtual void endRun();
00119
00123 virtual cMessage *getNextEvent();
00124
00130 virtual void processOutgoingMessage(cMessage *msg, int procId, int moduleId, int gateId, void *data);
00131 };
00132
00133 #endif