8 #ifndef EVENTDISPATCHER_H_
9 #define EVENTDISPATCHER_H_
14 #include <ibrcommon/thread/Mutex.h>
15 #include <ibrcommon/thread/MutexLock.h>
34 : _dispatcher(dispatcher) { };
36 virtual ~EventProcessorImpl() { };
38 void process(
const Event *evt)
40 ibrcommon::MutexLock l(_dispatcher._dispatch_lock);
41 for (
typename std::list<
EventReceiver<E>*>::iterator iter = _dispatcher._receivers.begin();
42 iter != _dispatcher._receivers.end(); ++iter)
45 receiver.
raiseEvent(static_cast<const E&>(*evt));
48 _dispatcher._stat_count++;
55 ibrcommon::MutexLock l(_dispatch_lock);
64 _processor.process(evt);
78 ibrcommon::MutexLock l(_dispatch_lock);
79 _receivers.push_back(receiver);
83 ibrcommon::MutexLock l(_dispatch_lock);
84 for (
typename std::list<
EventReceiver<E>*>::iterator iter = _receivers.begin(); iter != _receivers.end(); ++iter)
86 if ((*iter) == receiver)
88 _receivers.erase(iter);
105 static void raise(E *evt) {
106 instance()._raise(evt);
113 instance()._queue(evt);
117 instance()._add(receiver);
121 instance()._remove(receiver);
129 return instance()._stat_count;
133 ibrcommon::Mutex _dispatch_lock;
134 std::list<EventReceiver<E>*> _receivers;
135 EventProcessorImpl _processor;
virtual void raiseEvent(const E &evt)=0
static void add(EventReceiver< E > *receiver)
static void queue(E *evt)
static void resetCounter()
static void queue(EventProcessor &proc, Event *evt)
virtual ~EventDispatcher()
static size_t getCounter()