XnStatus SyncSocketConnection::Connect() { if (IsConnected()) { return XN_STATUS_OK; } XnStatus nRetVal = xnOSCreateSocket(XN_OS_TCP_SOCKET, m_strIP, m_nPort, &m_hSocket); if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_SYNC_SOCKET, "Failed to create socket %s:%u: %s", m_strIP, m_nPort, xnGetStatusString(nRetVal)); m_hSocket = NULL; return nRetVal; } nRetVal = xnOSConnectSocket(m_hSocket, CONNECT_TIMEOUT); if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_SYNC_SOCKET, "Failed to connect socket %s:%u: %s", m_strIP, m_nPort, xnGetStatusString(nRetVal)); xnOSCloseSocket(m_hSocket); m_hSocket = NULL; return nRetVal; } return XN_STATUS_OK; }
XnStatus ClientSocketInConnection::ConnectSocket(XN_SOCKET_HANDLE& hSocket, const XnChar* strIP, XnUInt16 nPort) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = xnOSCreateSocket(XN_OS_TCP_SOCKET, strIP, nPort, &hSocket); XN_IS_STATUS_OK_LOG_ERROR("Create input socket", nRetVal); xnLogVerbose(XN_MASK_SOCKETS, "Client connecting to %s:%u...", strIP, nPort); nRetVal = xnOSConnectSocket(hSocket, CONNECT_TIMEOUT); XN_IS_STATUS_OK_LOG_ERROR("Connect input socket", nRetVal); xnLogVerbose(XN_MASK_SOCKETS, "Client connected to %s:%u", strIP, nPort); return XN_STATUS_OK; }
XnStatus XnSensorClient::CreateIOStreamImpl(const XnChar *strConnectionString, XnIOStream *&pStream) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = xnOSCreateSocket(XN_OS_TCP_SOCKET, XN_SENSOR_SERVER_IP_ADDRESS, XN_SENSOR_SERVER_PORT, &m_hSocket); XN_IS_STATUS_OK(nRetVal); // connect to server XnUInt64 nStart; xnOSGetTimeStamp(&nStart); nRetVal = XN_STATUS_OS_NETWORK_TIMEOUT; for (XnUInt32 nRetries = 0; (nRetries < XN_SENSOR_CLIENT_CONNECT_RETRIES) && (nRetVal != XN_STATUS_OK); nRetries++) { nRetVal = xnOSConnectSocket(m_hSocket, XN_SENSOR_CLIENT_WAIT_FOR_SERVER); } if (nRetVal == XN_STATUS_OS_NETWORK_TIMEOUT) { xnLogError(XN_MASK_SENSOR_CLIENT, "Got timeout waiting for server"); return nRetVal; } else if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_SENSOR_CLIENT, "Got an error trying to connect to server socket: %s", xnGetStatusString(nRetVal)); return nRetVal; } XnIONetworkStream *pNetworkStream = XN_NEW(XnIONetworkStream, m_hSocket); if (pNetworkStream == NULL) { xnOSCloseSocket(m_hSocket); return XN_STATUS_ALLOC_FAILED; } pNetworkStream->SetReadTimeout(XN_SENSOR_CLIENT_READ_TIMEOUT); pStream = pNetworkStream; // create outgoing data packer (incoming is created by base class) m_pOutgoingPacker = XN_NEW(XnDataPacker, pNetworkStream, XN_SENSOR_SERVER_CONFIG_PACKER_SIZE); if (m_pOutgoingPacker == NULL) { XN_DELETE(pNetworkStream); xnOSCloseSocket(m_hSocket); return XN_STATUS_ALLOC_FAILED; } nRetVal = m_pOutgoingPacker->Init(); if (nRetVal != XN_STATUS_OK) { XN_DELETE(pNetworkStream); XN_DELETE(m_pOutgoingPacker); xnOSCloseSocket(m_hSocket); return nRetVal; } // send server a request to open the sensor nRetVal = m_pOutgoingPacker->WriteCustomData(XN_SENSOR_SERVER_MESSAGE_OPEN_SENSOR, strConnectionString, strlen(strConnectionString) + 1); if (nRetVal != XN_STATUS_OK) { XN_DELETE(pNetworkStream); XN_DELETE(m_pOutgoingPacker); xnOSCloseSocket(m_hSocket); return nRetVal; } return (XN_STATUS_OK); }