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); }
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)); } }