void SFMulitiCasualGameDispatcher::Dispatch(BasePacket* pPacket) { ISession* pSession = pPacket->GetSessionDesc().pSession; switch (pPacket->GetPacketType()) { case SFPACKET_CONNECT: { #ifdef _DEBUG pSession->SetLoginState(SESSION_STATE_AUTENTICATE); pSession->m_channelNum = 1; SFPacket* pkt = PacketPoolSingleton::instance()->Alloc(); pkt->SetPacketType(SFPACKET_DATA); pkt->SetSerial(pPacket->GetSerial()); pkt->SetPacketID(12345); pkt->SetSessionDesc(pPacket->GetSessionDesc()); DistributePacket(pkt); #else pSession->SetLoginState(SESSION_STATE_CONNECT); #endif ReleasePacket(pPacket); } return; case SFPACKET_DISCONNECT: { if (pSession->GetLoginState() == SESSION_STATE_AUTENTICATE) { DistributePacket(pPacket); } return; } case SFPACKET_DATA: if (pSession->GetLoginState() == SESSION_STATE_AUTENTICATE) DistributePacket(pPacket); else if (pSession->GetLoginState() == SESSION_STATE_CONNECT) { if (true == OnAuthenticate(pPacket)) { pSession->m_channelNum = 1; pSession->SetLoginState(SESSION_STATE_AUTENTICATE); } else { pSession->SetLoginState(SESSION_STATE_NULL); SFEngine::GetInstance()->Disconnect(pPacket->GetSerial()); } ReleasePacket(pPacket); } else { pSession->SetLoginState(SESSION_STATE_NULL); SFEngine::GetInstance()->Disconnect(pPacket->GetSerial()); ReleasePacket(pPacket); } } }
void RPCClientTransportLayer::send(char * buf, int size) throw(ServiceException) { SFPacket packet; packet.SetPacketID(60000); packet.Write((const BYTE*)buf, size); SFNetworkEntry::GetInstance()->TCPSend(&packet); }