Пример #1
0
int CIOCPFileAccessor::Update(int ProcessPacketLimit)
{
	int PacketCount1=0;
	int PacketCount2=0;
	
	COverLappedObject * pOverLappedObject;
	while(m_DataQueue.PopFront(pOverLappedObject))
	{			
		if(pOverLappedObject->GetType()==IO_FILE_READ)
		{
			ULONG64_CONVERTER ReadOffset;
			ReadOffset.HighPart=pOverLappedObject->GetOverlapped()->OffsetHigh;
			ReadOffset.LowPart=pOverLappedObject->GetOverlapped()->Offset;
			OnReadData(ReadOffset.QuadPart,*(pOverLappedObject->GetDataBuff()));
		}
		else
		{
			ULONG64_CONVERTER WriteOffset;
			WriteOffset.HighPart=pOverLappedObject->GetOverlapped()->OffsetHigh;
			WriteOffset.LowPart=pOverLappedObject->GetOverlapped()->Offset;
			OnWriteData(WriteOffset.QuadPart,*(pOverLappedObject->GetDataBuff()));
		}
		
			
		GetServer()->DeleteOverLappedObject(pOverLappedObject);
		PacketCount1++;
		if(PacketCount1>=ProcessPacketLimit)
			break;
	}

	FIOCP_ERROR_INFO ErrorInfo;
	while(m_ErrorQueue.PopFront(ErrorInfo))
	{			
		OnError(ErrorInfo.ErrorType,ErrorInfo.ErrorCode,ErrorInfo.QueryType,ErrorInfo.QueryPos,ErrorInfo.QuerySize);
		PacketCount2++;
		if(PacketCount2>=ProcessPacketLimit)
			break;
	}
	
	if(m_WantClose)
	{		
		Close();		
	}
	return PacketCount1+PacketCount2;
}
Пример #2
0
int CRealMediaObj::Process(J_AsioDataBase &asioData)
{
	int nRet = J_OK;
	J_CommandFilter *videoCommand = dynamic_cast<J_CommandFilter *>(m_pObj);
	if (videoCommand != NULL)
	{
		if (asioData.ioCall == J_AsioDataBase::j_read_e)
		{
			m_resid = videoCommand->GetResid();
			switch (videoCommand->GetCommandType())
			{
			case jo_start_real:
				nRet = StartVideo();
				J_OS::LOGINFO("CRealMediaObj::Process StartVideo socket =  %d ret = %d", m_nSocket.sock, nRet);
				break;
			case jo_stop_real:
			{
				nRet = StopVideo();
				J_OS::LOGINFO("CRealMediaObj::Process StopVideo socket =  %d ret = %d", m_nSocket.sock, nRet);
				break;
			}
			default:
				J_OS::LOGINFO("CRealMediaObj::Process CommandType unkown type =  %d", videoCommand->GetCommandType());
				break;
			}
		}
		else if (asioData.ioCall == J_AsioDataBase::j_write_e)
		{
			if (!m_bStart)
			{
				J_OS::LOGINFO("CRealMediaObj::Process !m_bStart socket = %d", m_nSocket.sock);
				return J_OK;
			}
			return OnWriteData(asioData);
		}
	}

	return nRet;
}