Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

EventGeneratorBase.cc

Go to the documentation of this file.
00001 #include "EventGeneratorBase.h"
00002 #include "Events/EventRouter.h"
00003 
00004 using namespace std;
00005 
00006 void
00007 EventGeneratorBase::DoStart() {
00008   BehaviorBase::DoStart();
00009   if(autoListen && getGeneratorID()!=EventBase::numEGIDs) {
00010     erouter->addListener(this,EventBase::erouterEGID,getGeneratorID());
00011     if(hasListeners())
00012       addSrcListener();
00013   }
00014 }
00015 
00016 void
00017 EventGeneratorBase::DoStop() {
00018   erouter->removeListener(this);
00019   isListening=false;
00020   BehaviorBase::DoStop();
00021 }
00022 
00023 void
00024 EventGeneratorBase::processEvent(const EventBase& event) {
00025   if(!autoListen || getGeneratorID()==EventBase::numEGIDs)
00026     return;
00027   if(event.getGeneratorID()==EventBase::erouterEGID) {
00028     if(hasListeners()) {
00029       addSrcListener();
00030     } else {
00031       removeSrcListener();
00032     }
00033   }
00034 }
00035 
00036 void
00037 EventGeneratorBase::setAutoListen(EventBase::EventGeneratorID_t gid) {
00038   removeSrcListener();
00039   autoListen=true;
00040   srcGenID=gid;
00041   specificity=GENERATOR;
00042   if(gid==EventBase::numEGIDs) {
00043     autoListen=false;
00044     return;
00045   }
00046   if(isActive())
00047     erouter->addListener(this,EventBase::erouterEGID,getGeneratorID());
00048   if(hasListeners())
00049     addSrcListener();
00050 }
00051 
00052 void
00053 EventGeneratorBase::setAutoListen(EventBase::EventGeneratorID_t gid, size_t sid) {
00054   removeSrcListener();
00055   autoListen=true;
00056   srcGenID=gid;
00057   srcSourceID=sid;
00058   specificity=SOURCE;
00059   if(gid==EventBase::numEGIDs) {
00060     autoListen=false;
00061     return;
00062   }
00063   if(isActive())
00064     erouter->addListener(this,EventBase::erouterEGID,getGeneratorID());
00065   if(hasListeners())
00066     addSrcListener();
00067 }
00068 
00069 void
00070 EventGeneratorBase::setAutoListen(EventBase::EventGeneratorID_t gid, size_t sid, EventBase::EventTypeID_t tid) {
00071   removeSrcListener();
00072   autoListen=true;
00073   srcGenID=gid;
00074   srcSourceID=sid;
00075   srcTypeID=tid;
00076   specificity=TYPE;
00077   if(gid==EventBase::numEGIDs || tid==EventBase::numETIDs) {
00078     autoListen=false;
00079     return;
00080   }
00081   if(isActive())
00082     erouter->addListener(this,EventBase::erouterEGID,getGeneratorID());
00083   if(hasListeners())
00084     addSrcListener();
00085 }
00086 
00087 void
00088 EventGeneratorBase::unsetAutoListen() {
00089   removeSrcListener();
00090   autoListen=false;
00091 }
00092 
00093 bool
00094 EventGeneratorBase::hasListeners() const {
00095   return erouter->hasListeners(getGeneratorID(),getSourceID());
00096 }
00097 
00098 void
00099 EventGeneratorBase::addSrcListener() {
00100   if(isListening || getListenGeneratorID()==EventBase::numEGIDs)
00101     return;
00102   isListening=true;
00103   switch(specificity) {
00104   case GENERATOR:
00105     erouter->addListener(this,getListenGeneratorID());
00106     break;
00107   case SOURCE:
00108     erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
00109     break;
00110   case TYPE:
00111     if(getListenTypeID()==EventBase::numETIDs)
00112       return;
00113     erouter->addListener(this,getListenGeneratorID(),getListenSourceID(),getListenTypeID());
00114     break;
00115   }
00116 }
00117 
00118 void
00119 EventGeneratorBase::removeSrcListener() {
00120   if(!isListening)
00121     return;
00122   isListening=false;
00123   switch(specificity) {
00124   case GENERATOR:
00125     erouter->removeListener(this,getListenGeneratorID());
00126     break;
00127   case SOURCE:
00128     erouter->removeListener(this,getListenGeneratorID(),getListenSourceID());
00129     break;
00130   case TYPE:
00131     erouter->removeListener(this,getListenGeneratorID(),getListenSourceID(),getListenTypeID());
00132     break;
00133   }
00134 }
00135 
00136 
00137 
00138 /*! @file
00139  * @brief 
00140  * @author ejt (Creator)
00141  *
00142  * $Author: ejt $
00143  * $Name: tekkotsu-4_0 $
00144  * $Revision: 1.6 $
00145  * $State: Exp $
00146  * $Date: 2007/11/13 04:16:02 $
00147  */
00148 

Tekkotsu v4.0
Generated Thu Nov 22 00:54:52 2007 by Doxygen 1.5.4