PlayerManager

This commit is contained in:
2025-08-20 12:18:44 +02:00
parent bd56fb0646
commit a02cb2b309
11 changed files with 103 additions and 65 deletions

View File

@@ -1,30 +0,0 @@
#include <server/ConnectionHandler.h>
#include <iostream>
namespace td {
namespace server {
ConnectionHandler::ConnectionHandler(IServerSocket& a_Server, PlayerID a_Player) : m_Server(a_Server), m_Player(a_Player) {}
void ConnectionHandler::Handle(const protocol::packets::PlayerLoginPacket& a_Packet) {
protocol::PlayerInfo pInfo{m_Player, a_Packet->m_PlayerName};
// TODO
std::vector<protocol::PlayerInfo> players;
m_Server.Send(m_Player, protocol::packets::LoggingSuccessPacket(m_Player));
m_Server.Send(m_Player, protocol::packets::PlayerListPacket(players));
m_Server.Broadcast(protocol::packets::PlayerJoinPacket(pInfo));
m_Server.OnPlayerJoin(m_Player, pInfo);
std::cout << "[Server] " << a_Packet->m_PlayerName << " tried to join !\n";
}
void ConnectionHandler::Handle(const protocol::packets::DisconnectPacket& a_Packet) {
std::cout << "[Server] " << +m_Player << " wants to disconnect !\n";
m_Server.Disconnect(m_Player);
}
} // namespace server
} // namespace td

View File

@@ -1,12 +1,9 @@
#include <server/IServerSocket.h>
#include <server/ConnectionHandler.h>
namespace td {
namespace server {
IServerSocket::IServerSocket() {
RegisterHandler([this](PlayerID a_PlayerId) { return std::make_unique<ConnectionHandler>(*this, a_PlayerId); });
}
void IServerSocket::RegisterHandler(const PlayerPacketHandler& a_Handler) {

View File

@@ -0,0 +1,54 @@
#include <server/PlayerManager.h>
#include <iostream>
#include <server/IServerSocket.h>
namespace td {
namespace server {
PlayerManager::ConnectionHandler::ConnectionHandler(
std::map<PlayerID, PlayerInfo>& a_Players, IServerSocket& a_Socket, PlayerID a_Player) :
m_Players(a_Players), m_Socket(a_Socket), m_Player(a_Player) {}
void PlayerManager::ConnectionHandler::Handle(const protocol::packets::PlayerLoginPacket& a_Packet) {
PlayerInfo pInfo{m_Player, a_Packet->m_PlayerName};
std::vector<PlayerInfo> players;
players.reserve(m_Players.size());
for (auto& [id, player] : m_Players) {
players.push_back(player);
}
m_Socket.Send(m_Player, protocol::packets::LoggingSuccessPacket(m_Player));
m_Socket.Send(m_Player, protocol::packets::PlayerListPacket(players));
m_Socket.Broadcast(protocol::packets::PlayerJoinPacket(pInfo));
m_Players.emplace(m_Player, pInfo);
m_Socket.OnPlayerJoin(m_Player, pInfo);
std::cout << "[Server] " << a_Packet->m_PlayerName << " joined !\n";
}
void PlayerManager::ConnectionHandler::Handle(const protocol::packets::DisconnectPacket& a_Packet) {
std::cout << "[Server] " << +m_Player << " wants to disconnect !\n";
m_Socket.Disconnect(m_Player);
m_Players.erase(m_Player);
}
PlayerManager::PlayerManager(const std::shared_ptr<IServerSocket>& a_Socket) : m_Socket(a_Socket) {
a_Socket->RegisterHandler(
[this](PlayerID a_PlayerId) { return std::make_unique<ConnectionHandler>(m_Players, *m_Socket, a_PlayerId); });
}
PlayerManager::~PlayerManager() {}
void PlayerManager::RemovePlayer(PlayerID a_Player) {
m_Socket->Disconnect(a_Player);
m_Players.erase(a_Player);
}
PlayerInfo PlayerManager::GetPlayer(PlayerID a_Player) {
return m_Players.at(a_Player);
}
} // namespace server
} // namespace td

View File

@@ -5,7 +5,7 @@
namespace td {
namespace server {
Server::Server(const std::shared_ptr<IServerSocket>& a_Socket) : m_Socket(a_Socket), m_LastMspt(0) {}
Server::Server(const std::shared_ptr<IServerSocket>& a_Socket) : m_Socket(a_Socket), m_Players(a_Socket), m_LastMspt(0) {}
void Server::Update(float a_Delta) {
auto before = std::chrono::system_clock::now();