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
void RPCServer::HandleRequestsLoop() {
    std::unique_ptr<RPC::Packet> request_packet;

    LOG_INFO(RPC_Server, "Request handler started.");

    while ((request_packet = request_queue.PopWait())) {
        HandleSingleRequest(std::move(request_packet));
    }
}