File: XnSyncServerSocketConnection.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 (102 lines) | stat: -rw-r--r-- 2,789 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// XnSyncServerSocketConnection.h

#ifndef _XNSYNCSERVERSOCKETCONNECTION_H_
#define _XNSYNCSERVERSOCKETCONNECTION_H_

#include "XnSyncSocketConnection.h"
#include "XnStatusCodes.h"
#include "XnServerSocketInConnection.h"


namespace xn
{

class IAsyncInputConnection;

class SyncServerSocketConnection : virtual public SyncSocketConnection
{
public:
	// Overriding connect, and init because this class is allready created with valid socket handle
	virtual XnStatus Init(const XnChar* /*strIP*/, XnUInt16 /*nPort*/, XnUInt16 /*nMaxPacketSize*/)
	{
		return IsConnected() ? XN_STATUS_OK : XN_STATUS_ERROR;
	}
	virtual XnStatus Connect() 
	{
		return IsConnected() ? XN_STATUS_OK : XN_STATUS_ERROR;
	}
	friend class SyncServerSocketListener;
};


class ASyncServerSocketConnection : virtual public ServerSocketInConnection
{
public:
	virtual XnStatus ConnectSocket(XN_SOCKET_HANDLE& hSocket, const XnChar* /*strIP*/, XnUInt16 /*nPort*/)
	{
		hSocket = m_hSocketFromListener;
		return XN_STATUS_OK;
	}

protected:
	friend class SyncServerSocketListener;
	XN_SOCKET_HANDLE m_hSocketFromListener;
};

#define MAX_SERVER_CONTROL_CONNECTIONS 10
#define MAX_DATAOUT_SOCKETS	10

class SyncServerSocketListener
{
public:
	SyncServerSocketListener();
	virtual ~SyncServerSocketListener();

	virtual XnStatus Init(const XnChar* strIP, 
						  XnUInt16 nControlPort,			
						  XnUInt16 nInputPort,
						  XnUInt16 nFirstOutputDataPort,	
						  XnUInt16 nDataOutSockets,
						  XnUInt16 nMaxColntrolPacketSize,
						  XnUInt16 nMaxDataOutPacketSize,
						  XnUInt16 nMaxDataInPacketSize);
	virtual void Shutdown();

	// Returns internal SyncServerSocketConnection object, see note below
	XnStatus GetControlConnection(ISyncIOConnection*& pStream);

	// Creates a NEW SyncServerSocketConnection
	XnStatus CreateOutputDataConnection(int nID, IOutputConnection*& pConn);
	
	// Creates a NEW SyncServerSocketConnection
	XnStatus CreateInputDataConnection(IAsyncInputConnection*& pStream);



protected:
	XN_SOCKET_HANDLE m_hListenControlSocket;
	XN_SOCKET_HANDLE m_hListenDataInSocket;
	XN_SOCKET_HANDLE m_arrhListenDataOutSockets[MAX_DATAOUT_SOCKETS];

	XnUInt16 m_nDataOutSockets;	
	
	XnUInt16 m_nMaxControlPacketSize;
	XnUInt16 m_nMaxDataOutPacketSize;
	XnUInt16 m_nMaxDataInPacketSize;

	
	// The IConnectionFactory GetControlConnection function returns internal connections (not created with new),
	// To use the same API for the server and the client, the server code for IConnectionFactory::GetControlConnection should reurn internal connection too.
	// So here we use a connection pool
	struct PoolControlConnection
	{
		XnBool						fActive;
		SyncServerSocketConnection	syncConnection;
	} m_controlConnPool[MAX_SERVER_CONTROL_CONNECTIONS];
	
};


}

#endif //_XNSYNCSERVERSOCKETCONNECTION_H_