00001 //--------------------------------------------------------------------------- 00002 #ifndef __VemusEventDispatcher_H //Sentry 00003 #define __VemusEventDispatcher_H 00004 //--------------------------------------------------------------------------- 00005 #include <windows.h> 00006 #include "CoreServices\VemusEvent.h" 00007 //--------------------------------------------------------------------------- 00008 #include <list> 00009 #include <vector> 00010 using namespace std; 00011 00012 namespace VEMUS 00013 { 00014 00015 00016 //--------------------------------------------------------------------------- 00017 class VemusEventListener { 00018 public: 00019 enum VemusEventListenerType {eltNone = 0, eltThread, eltWindow}; 00020 00021 public: 00022 VemusEventListener(DWORD handle, VemusEventListenerType type = eltNone); 00023 00024 void post(VemusEvent& event); 00025 00026 public: 00027 DWORD handle; 00028 VemusEventListenerType type; 00029 00030 }; 00031 //--------------------------------------------------------------------------- 00032 typedef vector<VemusEventListener> VemusEventListeners; 00033 //--------------------------------------------------------------------------- 00034 class __CS VemusEventDispatcher { 00035 public: 00036 VemusEventDispatcher(); 00037 ~VemusEventDispatcher(); 00038 00039 void dispatch(VemusEvent& event); 00040 bool signal(); 00041 00042 void register_listener(VemusEventListener& listener); 00043 void unregister_listener(VemusEventListener& listener); 00044 00045 int find_listener(DWORD handle); 00046 00047 private: 00048 CRITICAL_SECTION section; 00049 00050 bool bShouldFinish; 00051 00052 list<VemusEvent> events; 00053 00054 VemusEventListeners listeners; 00055 00056 HANDLE hThread; 00057 DWORD dwThreadId; 00058 00059 private: 00060 static DWORD WINAPI EventDispatcherThreadFunc(void *ptr); 00061 }; 00062 //--------------------------------------------------------------------------- 00063 extern "C" __CS VemusEventDispatcher EventDispatcher; 00064 //--------------------------------------------------------------------------- 00065 00066 00067 } //NAMESPACE 00068 00069 #endif //__VemusEventDispatcher_H sentry 00070 //---------------------------------------------------------------------------
1.5.8