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, unsigned int 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, unsigned int 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   switch(specificity) {
00103   case GENERATOR:
00104     erouter->addListener(this,getListenGeneratorID());
00105     break;
00106   case SOURCE:
00107     erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
00108     break;
00109   case TYPE:
00110     if(getListenTypeID()==EventBase::numETIDs)
00111       return;
00112     erouter->addListener(this,getListenGeneratorID(),getListenSourceID(),getListenTypeID());
00113     break;
00114   }
00115   isListening=true;
00116 }
00117 
00118 void
00119 EventGeneratorBase::removeSrcListener() {
00120   if(!isListening)
00121     return;
00122   switch(specificity) {
00123   case GENERATOR:
00124     erouter->removeListener(this,getListenGeneratorID());
00125     break;
00126   case SOURCE:
00127     erouter->removeListener(this,getListenGeneratorID(),getListenSourceID());
00128     break;
00129   case TYPE:
00130     erouter->removeListener(this,getListenGeneratorID(),getListenSourceID(),getListenTypeID());
00131     break;
00132   }
00133   isListening=false;
00134 }
00135 
00136 
00137 
00138 /*! @file
00139  * @brief 
00140  * @author ejt (Creator)
00141  *
00142  * $Author: ejt $
00143  * $Name: tekkotsu-2_4_1 $
00144  * $Revision: 1.4 $
00145  * $State: Exp $
00146  * $Date: 2005/06/01 05:47:46 $
00147  */
00148 

Tekkotsu v2.4.1
Generated Tue Aug 16 16:32:46 2005 by Doxygen 1.4.4