Files
Tower-Defense2/include/server/PlayerManager.h
2025-08-22 11:41:58 +02:00

45 lines
1.0 KiB
C++

#pragma once
#include <td/misc/Signal.h>
#include <td/protocol/packet/Packets.h>
namespace td {
namespace server {
class IServerSocket;
class PlayerManager {
private:
std::map<PlayerID, PlayerInfo> m_Players;
std::shared_ptr<IServerSocket> m_Socket;
public:
utils::Signal<PlayerID, const PlayerInfo&> OnPlayerJoin;
utils::Signal<PlayerID> OnPlayerLeave;
PlayerManager(const std::shared_ptr<IServerSocket>& a_Socket);
~PlayerManager();
void RemovePlayer(PlayerID a_Player);
PlayerInfo GetPlayer(PlayerID a_Player);
private:
void Disconnect(PlayerID a_Player);
class ConnectionHandler : public protocol::PacketHandler {
private:
PlayerManager& m_PlayerManager;
PlayerID m_Player;
public:
ConnectionHandler(PlayerManager& a_PlayerManager, PlayerID a_Player);
~ConnectionHandler() = default;
virtual void Handle(const protocol::packets::PlayerLoginPacket& a_Packet) override;
virtual void Handle(const protocol::packets::DisconnectPacket& a_Packet) override;
};
};
} // namespace server
} // namespace td