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; }
//发送函数 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; }