BOOL SFFreeForAll::OnSpawnPlayer(SFPlayer* pPlayer, BasePacket* pPacket) { SFRoom* pRoom = GetOwner()->GetOwner(); SFProtobufPacket<SFPacketStore::MSG_SPAWN_PLAYER>* pSpawnPlayer = (SFProtobufPacket<SFPacketStore::MSG_SPAWN_PLAYER>*)pPacket; SpawnPlayerMsg msg; SF_GETPACKET_ARG(&msg, pSpawnPlayer->GetData().spawnplayer(), SpawnPlayerMsg); _CharacterInfo* pInfo = pPlayer->GetCharacterInfo(); pInfo->translation = msg.translation; pInfo->IsAlive = true; SFRoom::RoomMemberMap MemberMap = pRoom->GetRoomMemberMap(); SFRoom::RoomMemberMap::iterator iter = MemberMap.begin(); for(; iter != MemberMap.end();iter++) { SFPlayer* pTarget = iter->second; SendSpawnPlayer(pTarget, pPlayer); } return TRUE; }
BOOL ChatPacketEntry::ProcessPacket( BasePacket* pPacket) { if(pPacket->GetPacketID() == CGSF::ChatRes) { SFProtobufPacket<ChatPacket::Chat>* pChat = (SFProtobufPacket<ChatPacket::Chat>*)pPacket; std::cout << pChat->GetData().chatmessage() << std::endl; return TRUE; } else if(pPacket->GetPacketType() == SFPacket_Disconnect) { // g_pEngine->SetProcessing(FALSE); printf("Disconnect Server!!\n"); } else if(pPacket->GetPacketType() == SFPacket_Connect) { //g_pEngine->SetProcessing(TRUE); printf("Connect Server!!\n"); m_Serial = pPacket->GetOwnerSerial(); } return FALSE; }
BOOL ChatLogicEntry::OnPlayerData( BasePacket* pPacket ) { if(pPacket->GetPacketID() == CGSF::ChatReq) { SFProtobufPacket<ChatPacket::Chat>* pChat = (SFProtobufPacket<ChatPacket::Chat>*)pPacket; std::cout << pChat->GetData().chatmessage() << std::endl; /*SFPacket Packet; Packet.SetPacketID(pPacket->GetPacketID()); Packet.MakePacket(pPacket->GetDataBuffer(), pPacket->GetDataSize(), CGSF_PACKET_OPTION); Broadcast(&Packet, pPacket->GetOwnerSerial());*/ SFProtobufPacket<ChatPacket::Chat> ChatRes(CGSF::ChatRes); ChatRes.GetData().set_chatmessage(pChat->GetData().chatmessage()); Broadcast(&ChatRes); return TRUE; } return FALSE; }
BOOL SGBattle::OnCardSubmit( SFPlayer* pPlayer, BasePacket* pPacket) { SFProtobufPacket<SevenGamePacket::CardSubmit>* pCardSubmit = (SFProtobufPacket<SevenGamePacket::CardSubmit>*)pPacket; int currentTurnUser = m_pSevenGameManager->GetCurrentUserID(); SGUser* pUser = m_pSevenGameManager->FindUser(currentTurnUser); if(currentTurnUser != pPlayer->GetSerial()) return FALSE; SCardInfo info; info.iCardNum = pCardSubmit->GetData().cardnum(); info.iCardType = pCardSubmit->GetData().cardtype(); if (FALSE == m_pSevenGameManager->ProcessCardSubmit(currentTurnUser, info)) return FALSE; m_pSevenGameManager->UpdateTableState(&info); SendCardSubmit(currentTurnUser, info); m_pSevenGameManager->SetCurrentUserID(m_pSevenGameManager->GetNextUserID(pUser->GetID())); m_pSevenGameManager->EvaluateUser(pUser); if (m_pSevenGameManager->CheckGameEnd()) { SendWinner(); m_nGameState = SG_GAME_GAMEOVER; m_dwLastTickCount = GetTickCount(); return TRUE; } else { SendCurrentTurn(); } return TRUE; }
BOOL SendSpawnPlayer(SFPlayer* pPlayer, SFPlayer* pTarget) { SFProtobufPacket<FPSPacket::MSG_SPAWN_PLAYER> PktMsgSpawnPlayer = SFProtobufPacket<FPSPacket::MSG_SPAWN_PLAYER>(FPS::MSG_SPAWN_PLAYER); _CharacterInfo* pInfo = pTarget->GetCharacterInfo(); SpawnPlayerMsg msg; PktMsgSpawnPlayer.SetSerial(pPlayer->GetSerial()); msg.PlayerID = pTarget->GetSerial(); msg.translation = pInfo->translation; PktMsgSpawnPlayer.GetData().set_spawnplayer(&msg, sizeof(SpawnPlayerMsg)); SFEngine::GetInstance()->SendRequest(&PktMsgSpawnPlayer); return TRUE; }
BOOL SFFreeForAll::OnPlayerHealth(SFPlayer* pPlayer, BasePacket* pPacket) { SFRoom* pRoom = GetOwner()->GetOwner(); SFProtobufPacket<SFPacketStore::MSG_PLAYER_HEALTH>* pHealth = (SFProtobufPacket<SFPacketStore::MSG_PLAYER_HEALTH>*)pPacket; PlayerHealthMsg msg; SF_GETPACKET_ARG(&msg, pHealth->GetData().playerhealth(), PlayerHealthMsg); SFPlayer* pHurtPlayer = NULL; SFRoom::RoomMemberMap MemberMap = pRoom->GetRoomMemberMap(); SFRoom::RoomMemberMap::iterator iter = MemberMap.begin(); for(; iter != MemberMap.end();iter++) { if(iter->second->GetSerial() == msg.PlayerID) { pHurtPlayer = iter->second; break; } } if(pHurtPlayer == NULL) return FALSE; _CharacterInfo* pInfo = pHurtPlayer->GetCharacterInfo(); pInfo->health = msg.health; if(pInfo->health == 0) { pInfo->IsAlive = false; pInfo->DeathTime = GetTickCount(); } iter = MemberMap.begin(); for(; iter != MemberMap.end();iter++) { SFPlayer* pTarget = iter->second; SendPlayerHealth(pTarget, pHurtPlayer); } return TRUE; }
BOOL SendPlayerHealth(SFPlayer* pPlayer, SFPlayer* pTarget) { SFProtobufPacket<FPSPacket::MSG_PLAYER_HEALTH> PktPlayerHealth = SFProtobufPacket<FPSPacket::MSG_PLAYER_HEALTH>(FPS::MSG_PLAYER_HEALTH); PktPlayerHealth.SetSerial(pPlayer->GetSerial()); _CharacterInfo* pInfo = pTarget->GetCharacterInfo(); PlayerHealthMsg msg; msg.PlayerID = pTarget->GetSerial(); msg.health = pInfo->health; PktPlayerHealth.GetData().set_playerhealth(&msg, sizeof(SpawnPlayerMsg)); SFEngine::GetInstance()->SendRequest(&PktPlayerHealth); return TRUE; }
bool GUILogin::Notify(BasePacket* pPacket) { int PacketID = pPacket->GetPacketID(); if (PacketID == CGSF::LoginSuccess) { SFProtobufPacket<SFPacketStore::LoginSuccess>* pLoginSuccess = (SFProtobufPacket<SFPacketStore::LoginSuccess>*)pPacket; _UserInfo info; SF_GETPACKET_ARG(&info, pLoginSuccess->GetData().userinfo(), _UserInfo); g_pCasualGameManager->SetMyID(info.Serial); SFProtobufPacket<SFPacketStore::EnterLobby> request(CGSF::EnterLobby); g_pCasualGameManager->GetNetwork()->TCPSend(&request); } else if(PacketID == CGSF::LoginFail) { g_pCasualGameManager->GetGUI()->PopupMessage("Login Fail!!"); } return true; }
BOOL SFRoomManager::SendRoomPage( SFPlayerLobby* pLobbyState, int PageIndex /*= 0*/ ) { SFPlayer* pOwner = pLobbyState->GetOwner(); int roomCnt = m_ActiveRoomMap.size(); //if(roomCnt == 0) //return TRUE; SFProtobufPacket<SFPacketStore::RoomList> roomList = SFProtobufPacket<SFPacketStore::RoomList>(CGSF::RoomList); roomList.SetOwnerSerial(pOwner->GetSerial()); if(m_ActiveRoomMap.size() <= MAX_ROOM_COUNT_PER_PAGE) { ActiveRoomMap::iterator iter = m_ActiveRoomMap.begin(); for(;iter != m_ActiveRoomMap.end(); iter++) { SFPacketStore::RoomList::RoomInfo* pRoomInfo = roomList.GetData().add_info(); SFRoom* pRoom = iter->second; pRoomInfo->set_roomindex(pRoom->GetRoomIndex()); std::string roomName = "GameRoom"; roomName += std::to_string(pRoom->GetRoomIndex()); pRoomInfo->set_roomname(roomName); pRoomInfo->set_roomchief(pRoom->GetRoomChief()->GetPlayerName()); pRoomInfo->set_usercount(pRoom->GetRoomMemberMap().size()); pRoomInfo->set_maxusercount(4); pRoomInfo->set_needpassword(0); pRoomInfo->set_gamemode(pRoom->GetGameModeInfo()->GameMode); } } SFLogicEntry::GetLogicEntry()->SendRequest(&roomList); return TRUE; }
bool GUILobby::Notify(BasePacket* pPacket) { switch(pPacket->GetPacketID()) { case CGSF::ChatRes: { SFProtobufPacket<SFPacketStore::ChatRes>* pChatRes = (SFProtobufPacket<SFPacketStore::ChatRes>*)pPacket; std::string name = pChatRes->GetData().sender(); std::string szMessage = pChatRes->GetData().message(); // get the text entry editbox //Editbox* editbox = static_cast<Editbox*>(d_root->getChild(EntryBoxID)); // get history window // MultiLineEditbox* history = static_cast<MultiLineEditbox*>(d_root->getChild(HistoryID)); // append new text to history output //history->setText(history->getText() + szMessage); // scroll to bottom of history output //history->setCaretIndex(static_cast<size_t>(-1)); } break; case CGSF::RoomList: { SFProtobufPacket<SFPacketStore::RoomList>* pRoomList = (SFProtobufPacket<SFPacketStore::RoomList>*)pPacket; Listbox* lbox = static_cast<Listbox*>(d_root->getChild("RoomList")); lbox->resetList(); for(int i=0; i < pRoomList->GetData().info_size(); i++) { const SFPacketStore::RoomList::RoomInfo& info = pRoomList->GetData().info(i); //_PeerInfo PeerInfo; //SF_GETPACKET_ARG(&PeerInfo, Peer.info(), _PeerInfo); MyListItem* item = new MyListItem(info.roomname().c_str()); item->setSelectionColours(CEGUI::Colour(0.3f, 0.7f, 1.0f, 1.0f)); item->roomIndex = info.roomindex(); lbox->addItem(item); if(lbox->getType().compare("WindowsLook/Listbox") == 0) { item->setTextColours(CEGUI::Colour(0.0f, 0.0f, 0.0f, 1.0f)); } } } break; case CGSF::EnterRoom: { SFProtobufPacket<SFPacketStore::EnterRoom>* pEnterRoom = (SFProtobufPacket<SFPacketStore::EnterRoom>*)pPacket; } break; } return true; }
void Game::HandleNetworkMessage(BasePacket* pPacket) { // Process the received messaged based on its type. switch( pPacket->GetPacketID() ) { case CGSF::PeerList: { SFProtobufPacket<SFPacketStore::PeerList>* pPeerList = (SFProtobufPacket<SFPacketStore::PeerList>*)pPacket; for(int i=0; i < pPeerList->GetData().peer_size(); i++) { const SFPacketStore::PeerList::PeerInfo& Peer = pPeerList->GetData().peer(i); _PeerInfo PeerInfo; SF_GETPACKET_ARG(&PeerInfo, Peer.info(), _PeerInfo); g_pCasualGameManager->GetNetwork()->AddPeer(Peer.serial(), PeerInfo.ExternalIP, PeerInfo.ExternalPort, PeerInfo.LocalIP, PeerInfo.LocalPort); } } break; case CGSF::AddPeer: { //g_engine->TCPSend(CGSF::PlayerIP, pPacket->GetDataBuffer(), sizeof(PlayerIPMsg)); } break; case CGSF::DeletePeer: { SFProtobufPacket<SFPacketStore::DELETE_PEER>* pDeletePeer = (SFProtobufPacket<SFPacketStore::DELETE_PEER>*)pPacket; g_pCasualGameManager->GetNetwork()->DeletePeer(pDeletePeer->GetData().serial()); } break; case CGSF::MSG_CREATE_PLAYER: { SFProtobufPacket<SFPacketStore::MSG_CREATE_PLAYER>* pMsgCreatePlayer = (SFProtobufPacket<SFPacketStore::MSG_CREATE_PLAYER>*)pPacket; PlayerInfo Info; Info.PlayerID = pMsgCreatePlayer->GetData().serial(); PlayerObject *object = m_playerManager->AddPlayer(&Info); if(Info.PlayerID == g_pCasualGameManager->GetMyID()) { m_playerManager->SetLocalPlayer(object); g_engine->SetPlayerID(Info.PlayerID); g_engine->SetLocalID(Info.PlayerID); } g_engine->GetSceneManager()->AddObject( object ); if(Info.PlayerID == g_pCasualGameManager->GetMyID()) { SpawnPlayerMsg spm; spm.PlayerID = g_engine->GetPlayerID(); spm.translation = g_engine->GetSceneManager()->GetSpawnPointByID( pMsgCreatePlayer->GetData().spawnindex() )->GetTranslation(); SFProtobufPacket<FPSPacket::MSG_SPAWN_PLAYER> request(FPS::MSG_SPAWN_PLAYER); request.GetData().set_spawnplayer(&spm, sizeof(SpawnPlayerMsg)); g_pCasualGameManager->GetNetwork()->TCPSend(&request); } //int spawnid = g_engine->GetSceneManager()->GetSpawnPointID( g_engine->GetSceneManager()->GetRandomPlayerSpawnPoint() ); //m_playerManager->SpawnLocalPlayer( spawnid ); //m_playerManager->SpawnPlayer( Info.PlayerID , g_engine->GetSceneManager()->GetSpawnPointByID(PktMsgCreatePlayer.spawnindex() )->GetTranslation()); } break; case CGSF::MSG_DESTROY_PLAYER: { SFProtobufPacket<SFPacketStore::MSG_DESTROY_PLAYER>* pMsgDestroyPlayer = (SFProtobufPacket<SFPacketStore::MSG_DESTROY_PLAYER>*)pPacket; // Remove the player from the player manager and the scene. SceneObject *object = m_playerManager->GetPlayer( pMsgDestroyPlayer->GetData().serial() ); g_engine->GetSceneManager()->RemoveObject( &object ); m_playerManager->RemovePlayer( pMsgDestroyPlayer->GetData().serial() ); } break; case FPS::MSG_SPAWN_PLAYER: { SFProtobufPacket<FPSPacket::MSG_SPAWN_PLAYER>* pPlayerSpawn = (SFProtobufPacket<FPSPacket::MSG_SPAWN_PLAYER>*)pPacket; // Get a pointer to the game specific network message. SpawnPlayerMsg msg; SF_GETPACKET_ARG(&msg, pPlayerSpawn->GetData().spawnplayer(), SpawnPlayerMsg); // Spawn the player. m_playerManager->SpawnPlayer( msg.PlayerID, msg.translation ); PlayerObject *player = m_playerManager->GetPlayer( msg.PlayerID ); if(player != NULL && msg.PlayerID == g_engine->GetPlayerID()) { m_playerManager->GetLocalPlayer()->SetEnabled(true); } } break; case FPS::MSG_PLAYER_HEALTH: { SFProtobufPacket<FPSPacket::MSG_PLAYER_HEALTH>* pPlayerHealth = (SFProtobufPacket<FPSPacket::MSG_PLAYER_HEALTH>*)pPacket; PlayerHealthMsg msg; SF_GETPACKET_ARG(&msg, pPlayerHealth->GetData().playerhealth(), PlayerHealthMsg); // Set the player's health. m_playerManager->GetPlayer( msg.PlayerID )->SetHealth( msg.health ); // Check if the player has been killed. if( msg.health <= 0.0f ) m_playerManager->GetPlayer( msg.PlayerID )->Kill(); } break; case FPS::MSG_PLAYER_SCORE: { SFProtobufPacket<FPSPacket::MSG_PLAYER_SCORE>* pPlayerScore = (SFProtobufPacket<FPSPacket::MSG_PLAYER_SCORE>*)pPacket; PlayerScoreMsg msg; SF_GETPACKET_ARG(&msg, pPlayerScore->GetData().playerscore(), PlayerScoreMsg); // Update the player's score. m_playerManager->GetPlayer( msg.PlayerID )->SetFrags( msg.frags ); m_playerManager->GetPlayer( msg.PlayerID )->SetDeaths( msg.deaths ); } break; case FPS::MSG_PLAYER_WEAPON_CHANGE: { SFProtobufPacket<FPSPacket::MSG_PLAYER_WEAPON_CHANGE>* pPlayerWeaponChange = (SFProtobufPacket<FPSPacket::MSG_PLAYER_WEAPON_CHANGE>*)pPacket; PlayerWeaponChangeMsg msg; SF_GETPACKET_ARG(&msg, pPlayerWeaponChange->GetData().weaponchange(), PlayerWeaponChangeMsg); // Change the player's weapon. m_playerManager->GetPlayer( msg.PlayerID )->WeaponChanged( msg.weapon ); } break; case FPS::MSG_PLAYER_WEAPON_CHANGING: { SFProtobufPacket<FPSPacket::MSG_PLAYER_WEAPON_CHANGING>* pWeaponChanging = (SFProtobufPacket<FPSPacket::MSG_PLAYER_WEAPON_CHANGING>*)pPacket; PlayerWeaponChangeMsg msg; SF_GETPACKET_ARG(&msg, pWeaponChanging->GetData().weaponchanging(), PlayerWeaponChangeMsg); // Indicate that this player is changing weapons. m_playerManager->GetPlayer( msg.PlayerID )->WeaponChanging(); } break; } }