示例#1
0
CMultiXLayer::EventHandlerReturn	CMultiXL3::EventHandler(CMultiXEvent &Event)
{
	switch(Event.EventCode())
	{
		case	CMultiXEvent::L2ConnectCompleted	:
			return	OnConnectCompleted(Event);
			break;
		case	CMultiXEvent::L2AcceptCompleted	:
			return	OnAcceptCompleted(Event);
			break;
		case	CMultiXEvent::L2NewBlockReceived	:
			return	OnNewBlockReceived(Event);
			break;
		case	CMultiXEvent::L2SendCompleted	:
			return	OnSendCompleted(Event);
			break;
		case	CMultiXEvent::L2CloseCompleted	:
			return	OnCloseCompleted(Event);
			break;
	}

	Event.Target()	=	this->UpperLayer();
	MultiX().QueueEvent(&Event);
	return	CMultiXLayer::KeepEvent;
}
示例#2
0
//发送函数
bool CServerSocketItem::SendData(WORD wMainCmdID, WORD wSubCmdID, WORD wRountID)
{
	//效验状态
	if (m_bCloseIng==true) return false;
	if (m_wRountID!=wRountID) return false;
	if (m_dwRecvPacketCount==0) return false;
	if (IsValidSocket()==false) return false;

	//寻找发送结构
	COverLappedSend * pOverLappedSend=GetSendOverLapped();
	ASSERT(pOverLappedSend!=NULL);
	if (pOverLappedSend==NULL) return false;

	//构造数据
	CMD_Head * pHead=(CMD_Head *)pOverLappedSend->m_cbBuffer;
	pHead->CommandInfo.wMainCmdID=wMainCmdID;
	pHead->CommandInfo.wSubCmdID=wSubCmdID;
	WORD wSendSize=EncryptBuffer(pOverLappedSend->m_cbBuffer,sizeof(CMD_Head),sizeof(pOverLappedSend->m_cbBuffer));
	pOverLappedSend->m_WSABuffer.len=wSendSize;

	//发送数据
	if (m_OverLappedSendActive.GetCount()==1)
	{
		DWORD dwThancferred=0;
		int iRetCode=WSASend(m_hSocket,&pOverLappedSend->m_WSABuffer,1,&dwThancferred,0,&pOverLappedSend->m_OverLapped,NULL);
		if ((iRetCode==SOCKET_ERROR)&&(WSAGetLastError()!=WSA_IO_PENDING))
		{
			OnSendCompleted(pOverLappedSend,0L);
			return false;
		}
	}

	return true;
}