Why there is code of "_Emitters"?(solved)
Added by sambsp over 4 years ago
In event_server.cpp, there are codes:
void CEventServer::pump(bool allWindows) { // Avoid recurse (can arise if the process of an event decide to pump the server again....) nlassert(!_Pumping); _Pumping= true; // **** submit emitters events std::list<IEventEmitter*>::iterator item = _Emitters.begin(); // getting events from emitters while(item!=_Emitters.end()) { // ask emitters to submit their events to server (*item)->submitEvents(*this, allWindows); item++; } // **** process to listeners std::list<CEvent*>::iterator itev = _Events.begin(); while(itev!=_Events.end()) { // pump event bool bDelete=pumpEvent(*itev); if (bDelete) delete *itev; itev=_Events.erase (itev); } // end of pumping _Pumping= false; }
I cannot understand why every event should be tackled by "_Emitters" first, because I thought event server process those events. To simplify the answer, an example like "if there isn't this _Emitter, then ..." to explain this will be great appreciated.
Replies (3)
RE: Why there is code of "_Emitters"? - Added by sfb over 4 years ago
sambsp,
You're looking at emitters backwards. Emitters are emitting events, hence the name. The list of emitters is a list of objects which are emitting objects into NeL for consumption by NeL event listener. An emitter represents a class that converts from some native event system (e.g. Windows, X11, Qt) into NeL.
HTH.
Thanks,
sfb
/s
RE: Why there is code of "_Emitters"? - Added by kervala over 4 years ago
Emitters are all classes implementing IEventEmitter interface :
- CDIEventEmitter : code\nel\include\nel\misc\di_event_emitter.h
- CWinEventEmitter : code\nel\include\nel\misc\win_event_emitter.h
- CUnixEventEmitter : code\nel\src\3d\driver\opengl\unix_event_emitter.h
- CCocoaEventEmitter : code\nel\src\3d\driver\opengl\mac\cocoa_event_emitter.h
(1-3/3)