Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
rtp::server::GameManager Class Reference

Manages game state, rooms, and player interactions on the server side. More...

#include <GameManager.hpp>

Collaboration diagram for rtp::server::GameManager:

Public Member Functions

 GameManager (ServerNetwork &networkManager)
 Constructor for GameManager.
 
 ~GameManager ()
 Destructor for GameManager.
 
void gameLoop (void)
 Main game loop.
 
void startGame (Room &room)
 Start a game in the specified room.
 

Private Member Functions

void processNetworkEvents (void)
 Process incoming network events with OpCode handling.
 
void handlePlayerConnect (uint32_t sessionId)
 Handle a new player connection.
 
void handlePlayerDisconnect (uint32_t sessionId)
 Handle a player disconnection.
 
void handlePlayerLoginAuth (uint32_t sessionId, const net::Packet &packet)
 Handle player login with provided username if successful then join the lobby.
 
void handlePlayerRegisterAuth (uint32_t sessionId, const net::Packet &packet)
 Handle player registration with provided username.
 
void handleListRooms (uint32_t sessionId)
 Handle a request to list available rooms.
 
void handleCreateRoom (uint32_t sessionId, const net::Packet &packet)
 Handle a generic incoming packet from a player.
 
void handleJoinRoom (uint32_t sessionId, const net::Packet &packet)
 Handle a generic incoming packet from a player.
 
void handleLeaveRoom (uint32_t sessionId, const net::Packet &packet)
 Handle a generic incoming packet from a player.
 
void handleSetReady (uint32_t sessionId, const net::Packet &packet)
 Handle a generic incoming packet from a player.
 
void handleUpdateSelectedWeapon (uint32_t sessionId, const net::Packet &packet)
 Handle an update to the selected weapon sent by client.
 
void handleRoomChatSended (uint32_t sessionId, const net::Packet &packet)
 Handle a generic incoming packet from a player.
 
void handlePacket (uint32_t sessionId, const net::Packet &packet)
 Handle an incoming packet from a player.
 
void handlePing (uint32_t sessionId, const net::Packet &packet)
 
bool handleChatCommand (PlayerPtr player, const std::string &message)
 
void sendChatToSession (uint32_t sessionId, const std::string &message)
 
void sendSystemMessageToRoom (uint32_t roomId, const std::string &message)
 
void sendEntitySpawnToSessions (const ecs::Entity &entity, const std::vector< uint32_t > &sessions)
 
void sendRoomEntitySpawnsToSession (uint32_t roomId, uint32_t sessionId)
 

Private Attributes

ServerNetwork_networkManager
 Reference to the ServerNetwork instance.
 
ecs::Registry _registry
 ECS Registry for managing entities and components.
 
std::unique_ptr< NetworkSyncSystem_networkSyncSystem
 Server network system for handling network-related ECS operations.
 
std::unique_ptr< MovementSystem_movementSystem
 Movement system for updating entity positions.
 
std::unique_ptr< AuthSystem_authSystem
 Authentication system for handling player logins.
 
std::unique_ptr< RoomSystem_roomSystem
 Room system for handling room management.
 
std::unique_ptr< PlayerSystem_playerSystem
 Player system for handling player-related operations.
 
std::unique_ptr< EntitySystem_entitySystem
 Entity system for handling entity-related operations.
 
std::unique_ptr< PlayerMouvementSystem_playerMouvementSystem
 Player movement system for handling player-specific movement logic.
 
std::unique_ptr< PlayerShootSystem_playerShootSystem
 Player shooting system for handling bullets.
 
std::unique_ptr< EnemyAISystem_enemyAISystem
 Enemy AI system for movement patterns.
 
std::unique_ptr< LevelSystem_levelSystem
 Level system for timed spawns.
 
std::unique_ptr< HomingSystem_homingSystem
 Homing system for tracker bullets.
 
std::unique_ptr< BoomerangSystem_boomerangSystem
 Boomerang system for boomerang projectiles.
 
std::unique_ptr< CollisionSystem_collisionSystem
 Collision system for pickups/obstacles.
 
std::unique_ptr< EnemyShootSystem_enemyShootSystem
 Enemy shooting system.
 
std::unique_ptr< BulletCleanupSystem_bulletCleanupSystem
 Bullet cleanup system.
 
uint32_t _serverTick = 0
 Current server tick for synchronization.
 
std::mutex _mutex
 Mutex for thread-safe operations.
 
bool _gamePaused = false
 Global game pause flag.
 
float _gameSpeed = 1.0f
 Global game speed multiplier.
 

Detailed Description

Manages game state, rooms, and player interactions on the server side.

Definition at line 72 of file GameManager.hpp.

Constructor & Destructor Documentation

◆ GameManager()

◆ ~GameManager()

rtp::server::GameManager::~GameManager ( )

Destructor for GameManager.

Definition at line 122 of file GameManager.cpp.

References rtp::log::info().

Member Function Documentation

◆ gameLoop()

void rtp::server::GameManager::gameLoop ( void  )

Main game loop.

Note
Processes network events, updates game state, and manages rooms

Definition at line 127 of file GameManager.cpp.

References _boomerangSystem, _bulletCleanupSystem, _collisionSystem, _enemyAISystem, _enemyShootSystem, _gamePaused, _gameSpeed, _homingSystem, _levelSystem, _movementSystem, _playerMouvementSystem, _playerShootSystem, _roomSystem, _serverTick, and processNetworkEvents().

Referenced by main().

◆ handleChatCommand()

bool rtp::server::GameManager::handleChatCommand ( PlayerPtr  player,
const std::string &  message 
)
private

◆ handleCreateRoom()

void rtp::server::GameManager::handleCreateRoom ( uint32_t  sessionId,
const net::Packet packet 
)
private

◆ handleJoinRoom()

void rtp::server::GameManager::handleJoinRoom ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle a generic incoming packet from a player.

Parameters
sessionIdUnique identifier of the player sending the packet
packetReference to the received Packet

Definition at line 386 of file GameManager.cpp.

References _mutex, _networkManager, _playerSystem, _roomSystem, rtp::server::Room::InGame, rtp::net::JoinRoomPayload::isSpectator, rtp::net::JoinRoomPayload::roomId, rtp::server::ServerNetwork::sendPacket(), sendRoomEntitySpawnsToSession(), rtp::net::StartGame, and rtp::net::TCP.

Referenced by processNetworkEvents().

◆ handleLeaveRoom()

void rtp::server::GameManager::handleLeaveRoom ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle a generic incoming packet from a player.

Parameters
sessionIdUnique identifier of the player sending the packet
packetReference to the received Packet

Definition at line 415 of file GameManager.cpp.

References _mutex, _playerSystem, _roomSystem, and rtp::log::info().

Referenced by processNetworkEvents().

◆ handleListRooms()

void rtp::server::GameManager::handleListRooms ( uint32_t  sessionId)
private

Handle a request to list available rooms.

Parameters
sessionIdUnique identifier of the player requesting the room list
packetReference to the received Packet

Definition at line 334 of file GameManager.cpp.

References _roomSystem.

Referenced by processNetworkEvents().

◆ handlePacket()

void rtp::server::GameManager::handlePacket ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle an incoming packet from a player.

Parameters
sessionIdUnique identifier of the player sending the packet
packetReference to the received Packet

Definition at line 516 of file GameManager.cpp.

References _mutex, rtp::log::debug(), rtp::net::Packet::header, rtp::log::info(), rtp::net::LoginRequest, and rtp::net::Header::opCode.

Referenced by processNetworkEvents().

◆ handlePing()

void rtp::server::GameManager::handlePing ( uint32_t  sessionId,
const net::Packet packet 
)
private

◆ handlePlayerConnect()

void rtp::server::GameManager::handlePlayerConnect ( uint32_t  sessionId)
private

Handle a new player connection.

Parameters
sessionIdUnique identifier of the connecting player

Definition at line 221 of file GameManager.cpp.

References rtp::log::info().

Referenced by processNetworkEvents().

◆ handlePlayerDisconnect()

void rtp::server::GameManager::handlePlayerDisconnect ( uint32_t  sessionId)
private

◆ handlePlayerLoginAuth()

void rtp::server::GameManager::handlePlayerLoginAuth ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle player login with provided username if successful then join the lobby.

Parameters
sessionIdUnique identifier of the player
usernamePlayer's username

Definition at line 292 of file GameManager.cpp.

References _authSystem, _mutex, _playerSystem, _roomSystem, rtp::log::error(), rtp::log::info(), and rtp::server::InLobby.

Referenced by processNetworkEvents().

◆ handlePlayerRegisterAuth()

void rtp::server::GameManager::handlePlayerRegisterAuth ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle player registration with provided username.

Parameters
sessionIdUnique identifier of the player
usernamePlayer's username

Definition at line 315 of file GameManager.cpp.

References _authSystem, _mutex, _playerSystem, _roomSystem, rtp::log::error(), rtp::log::info(), and rtp::server::InLobby.

Referenced by processNetworkEvents().

◆ handleRoomChatSended()

void rtp::server::GameManager::handleRoomChatSended ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle a generic incoming packet from a player.

Parameters
sessionIdUnique identifier of the player sending the packet
packetReference to the received Packet

Definition at line 469 of file GameManager.cpp.

References _mutex, _networkManager, _playerSystem, _roomSystem, handleChatCommand(), rtp::net::RoomChatPayload::message, rtp::net::RoomChatReceived, rtp::server::ServerNetwork::sendPacket(), rtp::net::RoomChatReceivedPayload::sessionId, and rtp::net::TCP.

Referenced by processNetworkEvents().

◆ handleSetReady()

void rtp::server::GameManager::handleSetReady ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle a generic incoming packet from a player.

Parameters
sessionIdUnique identifier of the player sending the packet
packetReference to the received Packet

Definition at line 429 of file GameManager.cpp.

References _mutex, _playerSystem, rtp::log::info(), and rtp::net::SetReadyPayload::isReady.

Referenced by processNetworkEvents().

◆ handleUpdateSelectedWeapon()

void rtp::server::GameManager::handleUpdateSelectedWeapon ( uint32_t  sessionId,
const net::Packet packet 
)
private

Handle an update to the selected weapon sent by client.

Definition at line 441 of file GameManager.cpp.

References _entitySystem, _mutex, _playerSystem, rtp::log::info(), and rtp::log::warning().

Referenced by processNetworkEvents().

◆ processNetworkEvents()

void rtp::server::GameManager::processNetworkEvents ( void  )
private

◆ sendChatToSession()

void rtp::server::GameManager::sendChatToSession ( uint32_t  sessionId,
const std::string &  message 
)
private

◆ sendEntitySpawnToSessions()

void rtp::server::GameManager::sendEntitySpawnToSessions ( const ecs::Entity entity,
const std::vector< uint32_t > &  sessions 
)
private

◆ sendRoomEntitySpawnsToSession()

void rtp::server::GameManager::sendRoomEntitySpawnsToSession ( uint32_t  roomId,
uint32_t  sessionId 
)
private

◆ sendSystemMessageToRoom()

void rtp::server::GameManager::sendSystemMessageToRoom ( uint32_t  roomId,
const std::string &  message 
)
private

◆ startGame()

void rtp::server::GameManager::startGame ( Room room)

Start a game in the specified room.

Parameters
roomReference to the Room where the game will start

Member Data Documentation

◆ _authSystem

std::unique_ptr<AuthSystem> rtp::server::GameManager::_authSystem
private

Authentication system for handling player logins.

Definition at line 204 of file GameManager.hpp.

Referenced by GameManager(), handlePlayerLoginAuth(), and handlePlayerRegisterAuth().

◆ _boomerangSystem

std::unique_ptr<BoomerangSystem> rtp::server::GameManager::_boomerangSystem
private

Boomerang system for boomerang projectiles.

Definition at line 213 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _bulletCleanupSystem

std::unique_ptr<BulletCleanupSystem> rtp::server::GameManager::_bulletCleanupSystem
private

Bullet cleanup system.

Definition at line 216 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _collisionSystem

std::unique_ptr<CollisionSystem> rtp::server::GameManager::_collisionSystem
private

Collision system for pickups/obstacles.

Definition at line 214 of file GameManager.hpp.

Referenced by GameManager(), gameLoop(), and handleChatCommand().

◆ _enemyAISystem

std::unique_ptr<EnemyAISystem> rtp::server::GameManager::_enemyAISystem
private

Enemy AI system for movement patterns.

Definition at line 210 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _enemyShootSystem

std::unique_ptr<EnemyShootSystem> rtp::server::GameManager::_enemyShootSystem
private

Enemy shooting system.

Definition at line 215 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _entitySystem

std::unique_ptr<EntitySystem> rtp::server::GameManager::_entitySystem
private

Entity system for handling entity-related operations.

Definition at line 207 of file GameManager.hpp.

Referenced by GameManager(), and handleUpdateSelectedWeapon().

◆ _gamePaused

bool rtp::server::GameManager::_gamePaused = false
private

Global game pause flag.

Definition at line 220 of file GameManager.hpp.

Referenced by gameLoop(), and handleChatCommand().

◆ _gameSpeed

float rtp::server::GameManager::_gameSpeed = 1.0f
private

Global game speed multiplier.

Definition at line 221 of file GameManager.hpp.

Referenced by gameLoop(), and handleChatCommand().

◆ _homingSystem

std::unique_ptr<HomingSystem> rtp::server::GameManager::_homingSystem
private

Homing system for tracker bullets.

Definition at line 212 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _levelSystem

std::unique_ptr<LevelSystem> rtp::server::GameManager::_levelSystem
private

Level system for timed spawns.

Definition at line 211 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _movementSystem

std::unique_ptr<MovementSystem> rtp::server::GameManager::_movementSystem
private

Movement system for updating entity positions.

Definition at line 203 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _mutex

std::mutex rtp::server::GameManager::_mutex
mutableprivate

◆ _networkManager

◆ _networkSyncSystem

std::unique_ptr<NetworkSyncSystem> rtp::server::GameManager::_networkSyncSystem
private

Server network system for handling network-related ECS operations.

Definition at line 202 of file GameManager.hpp.

Referenced by GameManager(), handlePlayerDisconnect(), processNetworkEvents(), sendEntitySpawnToSessions(), and sendRoomEntitySpawnsToSession().

◆ _playerMouvementSystem

std::unique_ptr<PlayerMouvementSystem> rtp::server::GameManager::_playerMouvementSystem
private

Player movement system for handling player-specific movement logic.

Definition at line 208 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _playerShootSystem

std::unique_ptr<PlayerShootSystem> rtp::server::GameManager::_playerShootSystem
private

Player shooting system for handling bullets.

Definition at line 209 of file GameManager.hpp.

Referenced by GameManager(), and gameLoop().

◆ _playerSystem

std::unique_ptr<PlayerSystem> rtp::server::GameManager::_playerSystem
private

◆ _registry

ecs::Registry rtp::server::GameManager::_registry
private

ECS Registry for managing entities and components.

Definition at line 200 of file GameManager.hpp.

Referenced by GameManager(), handlePlayerDisconnect(), sendEntitySpawnToSessions(), and sendRoomEntitySpawnsToSession().

◆ _roomSystem

std::unique_ptr<RoomSystem> rtp::server::GameManager::_roomSystem
private

◆ _serverTick

uint32_t rtp::server::GameManager::_serverTick = 0
private

Current server tick for synchronization.

Definition at line 218 of file GameManager.hpp.

Referenced by gameLoop().


The documentation for this class was generated from the following files: