NITE 1.4.1 - API Reference
|
00001 /******************************************************************************* 00002 * * 00003 * PrimeSense NITE 1.3 * 00004 * Copyright (C) 2010 PrimeSense Ltd. * 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; // When thread is internal 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