Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
ServerNetworkSystem.cpp
Go to the documentation of this file.
1
10#include "Game/Room.hpp"
11#include "Systems/NetworkSyncSystem.hpp"
12
13namespace rtp::server
14{
15
17 // Public API
19
20 NetworkSyncSystem::NetworkSyncSystem(ServerNetwork &network,
21 ecs::Registry &registry)
22 : _network(network)
23 , _registry(registry) {};
24
25 void NetworkSyncSystem::update(float dt)
26 {
27 (void)dt;
28 };
29
30 void NetworkSyncSystem::bindSessionToEntity(uint32_t sessionId,
31 uint32_t entityId)
32 {
33 _sessionToEntity[sessionId] = entityId;
34 }
35
36 void NetworkSyncSystem::handleInput(uint32_t sessionId,
37 const net::Packet &packet)
38 {
39 net::InputPayload payload;
40 net::Packet tempPacket = packet;
41 tempPacket >> payload;
42 log::info("InputTick: session={} mask={}", sessionId,
43 (int)payload.inputMask);
44 if (_sessionToEntity.find(sessionId) == _sessionToEntity.end()) {
45 return;
46 }
47
48 uint32_t entityIndex = _sessionToEntity[sessionId];
49 ecs::Entity entity(entityIndex, 0);
50
51 auto inputsRes =
52 _registry.get<ecs::components::server::InputComponent>();
53 if (inputsRes) {
54 auto &inputs = inputsRes->get();
55 if (inputs.has(entity)) {
56 inputs[entity].lastMask = inputs[entity].mask;
57 inputs[entity].mask = payload.inputMask;
58 return;
59 }
60 }
61
62 ecs::components::server::InputComponent inputData{};
63 inputData.mask = payload.inputMask;
64 _registry.add<ecs::components::server::InputComponent>(entity,
65 inputData);
66 }
67
68 void NetworkSyncSystem::handleDisconnect(uint32_t sessionId)
69 {
70 if (_sessionToEntity.find(sessionId) != _sessionToEntity.end()) {
71 uint32_t entityIndex = _sessionToEntity[sessionId];
72 ecs::Entity entity(entityIndex, 0);
73 _sessionToEntity.erase(sessionId);
74 log::info("Destroyed entity {} for disconnected session {}",
75 entityIndex, sessionId);
76 }
77 }
78
79 uint32_t
80 NetworkSyncSystem::handlePlayerConnection(uint32_t sessionId,
81 const net::Packet &packet)
82 {
83 net::ConnectPayload payload;
84 net::Packet tempPacket = packet;
85 tempPacket >> payload;
86 log::info("Player new connection [not logged]: session={}",
87 payload.sessionId);
88 return {sessionId};
89 }
90
91}
NetworkSyncSystem(ServerNetwork &network, ecs::Registry &registry)
Constructor for NetworkSyncSystem.
File : GameManager.hpp License: MIT Author : Elias Josué HAJJAR LLAUQUEN elias-josue....