File: XnSocketInConnection.h

package info (click to toggle)
openni2 2.2.0.33%2Bdfsg-11
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 22,216 kB
  • sloc: cpp: 111,197; ansic: 35,511; sh: 10,542; python: 1,313; java: 952; makefile: 575; xml: 12
file content (55 lines) | stat: -rw-r--r-- 1,851 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef __XNSOCKETINCONNECTION_H__
#define __XNSOCKETINCONNECTION_H__

#include "IAsyncInputConnection.h"
#include "XnLinkProtoLibDefs.h"
#include <XnOS.h>

namespace xn
{

class SocketInConnection : public IAsyncInputConnection
{
public:
	SocketInConnection();
	virtual ~SocketInConnection();
	virtual XnStatus Init(const XnChar* strIP, XnUInt16 nPort, XnUInt16 nMaxPacketSize);
	virtual void Shutdown();
	virtual XnStatus Connect();
	virtual XnBool IsConnected() const;
	virtual void Disconnect();
	virtual XnUInt16 GetMaxPacketSize() const;
	//pDataDestination may be NULL and then data is not sent
	virtual XnStatus SetDataDestination(IDataDestination* pDataDestination);

protected:
	static const XnUInt32 BUFFER_NUM_PACKETS;
	static const XnUInt32 RECEIVE_TIMEOUT;
	static const XnUInt32 CONNECT_TIMEOUT;
	static const XnUInt32 READ_THREAD_TERMINATE_TIMEOUT;

	virtual XnStatus ConnectSocket(XN_SOCKET_HANDLE& hSocket, const XnChar* strIP, XnUInt16 nPort) = 0;

protected:
	static XN_THREAD_PROC ReadThreadProc(XN_THREAD_PARAM pThreadParam);
	XnStatus ReadThreadProcImpl();
	//nSize is max size on input, actual size on output
	XnStatus ReceivePacket(XN_SOCKET_HANDLE hSocket, void* pDestBuffer, XnUInt32& nSize, XnBool& bCanceled);
	XnStatus ReceiveExactly(XN_SOCKET_HANDLE hSocket, void* pDestBuffer, XnUInt32 nSize, XnBool& bCanceled);


	XnConnectionString m_strIP;
	XnUInt16 m_nPort;
    XnUInt16 m_nMaxPacketSize;
	XN_THREAD_HANDLE m_hReadThread;
	XN_EVENT_HANDLE m_hConnectEvent; //This event signals we passed the actual connection command (and will be set even if connection failed)
	volatile XnBool m_bStopReadThread; //This is used to signal the read thread to stop
	IDataDestination* m_pDataDestination;
	XnUInt8* m_pBuffer;
	XnUInt32 m_nBufferSize;
	volatile XnStatus m_nConnectionStatus;
};

}

#endif // __XNSOCKETINCONNECTION_H__