XnStatus XnServerSession::HandleCloseStream() { XnStatus nRetVal = XN_STATUS_OK; // read it XnChar strStreamName[XN_DEVICE_MAX_STRING_LENGTH]; XnUInt32 nDataSize = XN_DEVICE_MAX_STRING_LENGTH; XnUInt32 nType = XN_SENSOR_SERVER_MESSAGE_CLOSE_STREAM; nRetVal = m_privateIncomingPacker.ReadCustomData(nType, strStreamName, &nDataSize); XN_IS_STATUS_OK(nRetVal); XnStatus nActionResult = CloseStreamImpl(strStreamName); nRetVal = SendReply(XN_SENSOR_SERVER_MESSAGE_GENERAL_OP_RESPOND, nActionResult); XN_IS_STATUS_OK(nRetVal); return (XN_STATUS_OK); }
XnStatus XnServerSession::RemoveStreamImpl(const XnChar* strName) { XnStatus nRetVal = XN_STATUS_OK; SessionStream* pStream = NULL; nRetVal = m_streamsHash.Get(strName, pStream); XN_IS_STATUS_OK(nRetVal); // first close it (so that ref count will be consistent) if (pStream->bIsOpen) { nRetVal = CloseStreamImpl(strName); XN_IS_STATUS_OK(nRetVal); pStream->bIsOpen = FALSE; } // release that stream nRetVal = m_pSensor->ReleaseStream(pStream->strStreamName); XN_IS_STATUS_OK(nRetVal); // if client had a buffer of this stream, release it XnStreamData* pStreamData = NULL; nRetVal = XnStreamDataSetGet(m_pStreamDataSet, pStream->strStreamName, &pStreamData); if (nRetVal == XN_STATUS_OK) { if (pStreamData->pInternal->pLockedBuffer != NULL) { m_pSensor->ReleaseFrameBuffer(pStream->strStreamName, pStreamData->pInternal->pLockedBuffer); } // free data XnStreamDataSetRemove(m_pStreamDataSet, pStreamData); XnStreamDataDestroy(&pStreamData); } // now remove it from client nRetVal = RemoveSessionModule(strName); XN_IS_STATUS_OK(nRetVal); return (XN_STATUS_OK); }
XnStatus XnServerSession::HandleCloseStream() { XnStatus nRetVal = XN_STATUS_OK; // read it XnChar strStreamName[XN_DEVICE_MAX_STRING_LENGTH]; XnUInt32 nDataSize = XN_DEVICE_MAX_STRING_LENGTH; XnUInt32 nType = XN_SENSOR_SERVER_MESSAGE_CLOSE_STREAM; nRetVal = m_privateIncomingPacker.ReadCustomData(nType, strStreamName, &nDataSize); XN_IS_STATUS_OK(nRetVal); XnStatus nActionResult = CloseStreamImpl(strStreamName); if (nActionResult != XN_STATUS_OK) { xnLogWarning(XN_MASK_SENSOR_SERVER, "Client %u failed to close stream '%s': %s", m_nID, strStreamName, xnGetStatusString(nActionResult)); } nRetVal = SendReply(XN_SENSOR_SERVER_MESSAGE_GENERAL_OP_RESPOND, nActionResult); XN_IS_STATUS_OK(nRetVal); return (XN_STATUS_OK); }