Ejemplo n.º 1
0
XnStatus XnServerSession::ServeThread()
{
	XnStatus nRetVal = XN_STATUS_OK;

	while (m_bShouldRun)
	{
		if (!m_ioStream.IsConnected())
		{
			xnLogWarning(XN_MASK_SENSOR_SERVER, "Client %u socket was closed. Closing session...", m_nID);
			CloseSessionImpl();
			break;
		}

		nRetVal = HandleSingleRequest();
		if ((nRetVal != XN_STATUS_OK) &&
			(nRetVal != XN_STATUS_OS_NETWORK_CONNECTION_CLOSED) && 
			(nRetVal != XN_STATUS_OS_NETWORK_TIMEOUT))
		{
			xnLogWarning(XN_MASK_SENSOR_SERVER, "Failed processing client request: %s", xnGetStatusString(nRetVal));
		}
	}

	// We cannot RemoveClient from this thread (as part of it is to close the thread). Instead, signal that 
	// client has stopped, and let server main thread wait for exit.
	m_bHasEnded = TRUE;

	return (XN_STATUS_OK);
}
Ejemplo n.º 2
0
XnStatus XnServerSession::HandleCloseSession()
{
	XnStatus nRetVal = XN_STATUS_OK;
	
	xnLogVerbose(XN_MASK_SENSOR_SERVER, "Received BYE from client %u", m_nID);

	XnStatus nActionResult = CloseSessionImpl();

	// client shouldn't care if close succeeded or not. always send OK.
	nRetVal = SendReply(XN_SENSOR_SERVER_MESSAGE_BYE, XN_STATUS_OK);
	if (nRetVal != XN_STATUS_OK)
	{
		xnLogWarning(XN_MASK_SENSOR_SERVER, "Failed to send BYE reply to client %u: %s", m_nID, xnGetStatusString(nRetVal));
	}

	return (XN_STATUS_OK);
}