Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;

}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
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;
}
Ejemplo n.º 9
0
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;
}
Ejemplo n.º 10
0
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;

}
Ejemplo n.º 11
0
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;

	}
}