00001 00002 00003 00004 00005 00006 #ifndef _EVENT_H 00007 #define _EVENT_H 00008 00009 #include "../YansCore/Types.h" 00010 #include "../YansCore/NetworkMessage.h" 00011 00012 namespace YansCoreNS 00013 { 00019 class Event 00020 { 00021 public: 00024 typedef size_t EventID; 00025 00028 explicit Event (void); 00029 00032 virtual ~Event (void); 00033 00034 EventID uid; 00035 00036 private: 00041 Event (Event const &); 00042 }; 00043 00044 00049 class SimulationStartEvent : public Event 00050 { 00053 typedef Event Base; 00054 00055 public: 00058 explicit SimulationStartEvent (void); 00059 00062 virtual ~SimulationStartEvent (void); 00063 00064 private: 00069 SimulationStartEvent (SimulationStartEvent const &); 00070 }; 00071 00072 00077 class SimulationEndEvent : public Event 00078 { 00081 typedef Event Base; 00082 00083 public: 00086 explicit SimulationEndEvent (void); 00087 00090 virtual ~SimulationEndEvent (void); 00091 00092 private: 00097 SimulationEndEvent (SimulationEndEvent const &); // declaration, no definition 00098 }; 00099 00103 class MessageSentEvent : public Event 00104 { 00107 typedef Event Base; 00108 00109 public: 00114 explicit MessageSentEvent (TopologyNS::UID const & senderUID, 00115 NetworkMessage const & message); 00116 00119 virtual ~MessageSentEvent (void); 00120 00124 TopologyNS::UID const & GetSenderUID (void) const; 00125 00129 NetworkMessage const & GetMessage (void) const; 00130 00131 private: 00136 MessageSentEvent (MessageSentEvent const &); 00137 00138 TopologyNS::UID const & senderUID; 00139 NetworkMessage const message; 00140 }; 00141 00146 class MessageReceivedEvent : public Event 00147 { 00150 typedef Event Base; 00151 00152 public: 00157 explicit MessageReceivedEvent (TopologyNS::UID const & receiverUID, 00158 NetworkMessage const & message); 00159 00162 virtual ~MessageReceivedEvent (void); 00163 00167 TopologyNS::UID const & GetReceiverUID (void) const; 00168 00172 NetworkMessage const & GetMessage (void) const; 00173 00174 private: 00179 MessageReceivedEvent (MessageReceivedEvent const &); // declaration, no definition 00180 00181 TopologyNS::UID const receiverUID; 00182 NetworkMessage const message; 00183 }; 00184 00185 00189 class MessageLostEvent : public Event 00190 { 00193 typedef Event Base; 00194 00195 public: 00201 explicit MessageLostEvent (TopologyNS::UID const & receiverUID, 00202 NetworkMessage const & message); 00203 00206 virtual ~MessageLostEvent (void); 00207 00212 TopologyNS::UID const & GetReceiverUID (void) const; 00213 00217 NetworkMessage const & GetMessage (void) const; 00218 00219 private: 00224 MessageLostEvent (MessageLostEvent const &); 00225 00226 TopologyNS::UID const receiverUID; 00227 NetworkMessage const message; 00228 }; 00229 00230 00236 struct TimerEventData 00237 { 00239 virtual ~TimerEventData (void); 00240 }; 00241 00242 class EventProcessor; 00243 00248 class TimerEvent : public Event 00249 { 00252 typedef Event Base; 00253 00254 public: 00260 explicit TimerEvent (EventProcessor & sender, 00261 boost::shared_ptr<const TimerEventData> data = boost::shared_ptr<const TimerEventData> ()); 00262 00265 virtual ~TimerEvent (void); 00266 00270 EventProcessor & GetSender (void) const; 00271 00274 boost::shared_ptr<TimerEventData const> GetData (void) const; 00275 00276 private: 00281 TimerEvent (TimerEvent const &); 00282 00283 EventProcessor & sender; 00284 boost::shared_ptr<TimerEventData const> data; 00285 }; 00286 } 00287 #endif /* _EVENT_H */ 00288