#include #include #include namespace td { namespace client { PlayerManager::PlayerManager(const std::shared_ptr& a_Socket) : m_Socket(a_Socket) { a_Socket->OnReceive.Connect(std::bind(&PlayerManager::HandleBase, this, std::placeholders::_1)); OnPlayerJoin.Connect([this](const PlayerInfo& a_Player){ std::cout << "[Client " << this << "] " << a_Player.m_PlayerName << " joined !\n"; }); OnPlayerLeave.Connect([this](const PlayerID a_Player){ std::cout << "[Client " << this << "] " << GetPlayer(a_Player).m_PlayerName << "(" << +a_Player << ") left !\n"; }); } PlayerManager::~PlayerManager() {} PlayerInfo PlayerManager::GetPlayer(PlayerID a_Player) { return m_Players.at(a_Player); } void PlayerManager::Handle(const protocol::packets::PlayerJoinPacket& a_Packet) { m_Players.emplace(a_Packet->m_Player.m_PlayerId, a_Packet->m_Player); OnPlayerJoin(a_Packet->m_Player); } void PlayerManager::Handle(const protocol::packets::PlayerListPacket& a_Packet) { for (auto pInfo : a_Packet->m_Players) { m_Players.emplace(pInfo.m_PlayerId, pInfo); OnPlayerJoin(pInfo); } } void PlayerManager::Handle(const protocol::packets::PlayerLeavePacket& a_Packet) { OnPlayerLeave(a_Packet->m_PlayerId); m_Players.erase(a_Packet->m_PlayerId); } } // namespace client } // namespace td