• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

XnVMessageListener.h

Go to the documentation of this file.
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

Generated on Tue Jul 19 2011 15:52:50 for NITE 1.4.1 - API Reference by  doxygen 1.7.1