Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_MESSAGE_LISTENER_H_
00010 #define _XNV_MESSAGE_LISTENER_H_
00011
00012 #include <XnThreadSafeQueue.h>
00013 #include "XnVNiteEvents.h"
00014 #include "XnVMessage.h"
00015
00021 class XNV_NITE_API XnVMessageListener
00022 {
00023 public:
00027 typedef void (XN_CALLBACK_TYPE* MessageUpdateCB)(XnVMessage* pMessage, void* cxt);
00031 typedef void (XN_CALLBACK_TYPE* ActivateCB)(void* cxt);
00035 typedef void (XN_CALLBACK_TYPE* DeactivateCB)(void* cxt);
00036
00042 XnVMessageListener(const XnChar* strName = "XnVMessageListener");
00043 virtual ~XnVMessageListener();
00044
00051 void BaseUpdate(XnVMessage* pMessage);
00057 virtual void Update(XnVMessage* pMessage) = 0;
00058
00066 virtual void HandleCCMessages(XnVMessage* pMessage);
00067
00073 virtual void Activate(XnBool bActive) {}
00074
00080 const XnChar* GetListenerName() const;
00081
00087 void Run(XnUInt32 nSessionMaxLength = ms_nSessionDefaultLength);
00093 XnStatus RunAsThread();
00099 void SetThreadId(XN_THREAD_ID hThread);
00103 void SetCurrentThread();
00104
00113 XnCallbackHandle RegisterUpdate(void* cxt, MessageUpdateCB CB);
00122 XnCallbackHandle RegisterActivate(void* cxt, ActivateCB CB);
00131 XnCallbackHandle RegisterDeactivate(void* cxt, DeactivateCB CB);
00132
00138 void UnregisterUpdate(XnCallbackHandle hCB);
00144 void UnregisterActivate(XnCallbackHandle hCB);
00150 void UnregisterDeactivate(XnCallbackHandle hCB);
00151
00157 void SetThreadProtectionQueueMode(XnBool bMode);
00163 XnBool GetThreadProtectecionQueueMode() const;
00167 virtual void ClearQueue();
00168 protected:
00169 XN_DECLARE_THREAD_SAFE_QUEUE_DECL(XNV_NITE_API, XnVMessage*, XnVMessageQueue);
00170 XN_DECLARE_EVENT_1ARG(XnVMessageSpecificEvent, XnVMessageEvent, XnVMessage*, pMessage);
00171
00172 XnBool IsInActivityThread() const;
00173
00174 static XN_THREAD_PROC MessageListenerThread(XN_THREAD_PARAM param);
00175 void MainLoop();
00176
00177 XN_THREAD_ID m_hActivityThreadId;
00178
00179 XN_THREAD_HANDLE m_hActivityThread;
00180 XnBool m_bInternalThreadAlive;
00181 XnBool m_bInternalThreadKill;
00182
00183 XnBool m_bThreadProtectionQueueMode;
00184
00185 static const XnUInt32 ms_nSessionDefaultLength;
00186
00187 XnVMessageQueue m_MessageQueue;
00188
00189 XnVMessageSpecificEvent m_UpdateCBs;
00190 XnVEvent m_ActivateCBs;
00191 XnVEvent m_DeactivateCBs;
00192
00193 XnChar* m_strListenerName;
00194
00195 XN_CRITICAL_SECTION_HANDLE m_hListenerCS;
00196 };
00197
00198 #endif