Пример #1
0
void CSocketClient::OnReceive(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	// TODO: 通知客户端接到消息了

	m_nLength=Receive(m_yBuffer,sizeof(m_yBuffer),0);
	
	
	// 解析数据包
	CMemoryBuffer memoryBuffer(m_yBuffer, sizeof(m_yBuffer));
	CSerializer arc;
	if(!arc.BeginReading(&memoryBuffer, false))
	{
		OutputDebugString(_T("ClientSocket: 网络包解析失败!"));
		return;
	}
	WORD wMsgID = -1;

	// 循环取信息
	while(1)
	{
		arc >> wMsgID;	
		// 通知网络层收到消息 [11/22/2010 Kaiming-Laptop]
		if( !this->OnMsgFromServer(wMsgID, arc) )
			break;
	}


	// 收到信息以后就清空
	m_nLength=0;
	memset(m_yBuffer,0,sizeof(m_yBuffer));
	//AsyncSelect(FD_READ);
	CSocket::OnReceive(nErrorCode);
}
Пример #2
0
	virtual void readLoop() {
		if (mRange.goesToEndOfFile()) {
			if (mDiskSize > 0) {
				mRange.setLength(mDiskSize - mRange.startbyte(), true);
			} else {
				aborted();
				return;
			}
		}
		MutableDenseDataPtr memoryBuffer(new DenseData(mRange));
		if (!read_full(mFd, memoryBuffer->writableData(), mRange.length())) {
			aborted();
			return;
		}
		mCallback(memoryBuffer, true, mDiskSize);
	}