00001
00002 #ifndef INCLUDED_EventTrans_h_
00003 #define INCLUDED_EventTrans_h_
00004
00005 #include "Behaviors/Transition.h"
00006 #include "Events/EventRouter.h"
00007
00008
00009
00010 class EventTrans : public Transition {
00011 private:
00012 int argcount;
00013 EventBase::EventGeneratorID_t egid;
00014 unsigned int esid;
00015 EventBase::EventTypeID_t etid;
00016
00017 public:
00018
00019
00020 EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid)
00021 : Transition("EventTrans",destination), argcount(1), egid(gid), esid(0), etid(EventBase::statusETID)
00022 {}
00023
00024 EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid)
00025 : Transition("EventTrans",destination), argcount(2), egid(gid), esid(sid), etid(EventBase::statusETID)
00026 {}
00027
00028 EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid, EventBase::EventTypeID_t tid)
00029 : Transition("EventTrans",destination), argcount(3), egid(gid), esid(sid), etid(tid)
00030 {}
00031
00032 EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid)
00033 : Transition("EventTrans",name,destination), argcount(1), egid(gid), esid(0), etid(EventBase::statusETID)
00034 {}
00035
00036 EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid)
00037 : Transition("EventTrans",name,destination), argcount(2), egid(gid), esid(sid), etid(EventBase::statusETID)
00038 {}
00039
00040 EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid, EventBase::EventTypeID_t tid)
00041 : Transition("EventTrans",name,destination), argcount(3), egid(gid), esid(sid), etid(tid)
00042 {}
00043
00044
00045
00046 virtual void DoStart() {
00047 Transition::DoStart();
00048 switch (argcount) {
00049 case 1: erouter->addListener(this,egid); break;
00050 case 2: erouter->addListener(this,egid,esid); break;
00051 case 3: erouter->addListener(this,egid,esid,etid);
00052 };
00053 }
00054
00055
00056 virtual void DoStop() {
00057 erouter->removeListener(this);
00058 Transition::DoStop();
00059 }
00060
00061
00062 virtual void processEvent(const EventBase&) { fire(); }
00063
00064 };
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 #endif