55#include " Game.h"
66#include " Logger.h"
77#include " RakNetTypes.h"
8- #include " routes/ ServerState.h"
8+ #include " ServerState.h"
99#include < chrono>
10- #include < mutex>
1110
1211namespace MasterPacketHandler {
13- namespace {
14- std::map<MessageType::Master, std::function<std::unique_ptr<MasterPacket>()>> g_Handlers = {
15- {MessageType::Master::SERVER_INFO, []() {
16- return std::make_unique<ServerInfo>();
17- }},
18- {MessageType::Master::PLAYER_ADDED, []() {
19- return std::make_unique<PlayerAdded>();
20- }},
21- {MessageType::Master::PLAYER_REMOVED, []() {
22- return std::make_unique<PlayerRemoved>();
23- }},
24- {MessageType::Master::SHUTDOWN_RESPONSE, []() {
25- return std::make_unique<ShutdownResponse>();
26- }},
27- {MessageType::Master::SHUTDOWN, []() {
28- return std::make_unique<Shutdown>();
29- }},
30- };
31- }
12+ std::map<MessageType::Master, std::function<std::unique_ptr<MasterPacket>()>> g_Handlers = {
13+ {MessageType::Master::SERVER_INFO, []() {
14+ return std::make_unique<ServerInfo>();
15+ }},
16+ {MessageType::Master::PLAYER_ADDED, []() {
17+ return std::make_unique<PlayerAdded>();
18+ }},
19+ {MessageType::Master::PLAYER_REMOVED, []() {
20+ return std::make_unique<PlayerRemoved>();
21+ }},
22+ {MessageType::Master::SHUTDOWN_RESPONSE, []() {
23+ return std::make_unique<ShutdownResponse>();
24+ }},
25+ {MessageType::Master::SHUTDOWN, []() {
26+ return std::make_unique<Shutdown>();
27+ }},
28+ };
3229
3330 bool ServerInfo::Deserialize (RakNet::BitStream& bitStream) {
3431 VALIDATE_READ (bitStream.Read (port));
@@ -42,8 +39,6 @@ namespace MasterPacketHandler {
4239 }
4340
4441 void ServerInfo::Handle () {
45- std::lock_guard<std::mutex> lock (ServerState::g_StatusMutex);
46-
4742 LOG (" MasterPacketHandler: Processing SERVER_INFO for service type %i, zone %u, instance %u, port %u" , serverType, zoneID, instanceID, port);
4843
4944 switch (serverType) {
@@ -94,7 +89,6 @@ namespace MasterPacketHandler {
9489 }
9590
9691 void PlayerAdded::Handle () {
97- std::lock_guard<std::mutex> lock (ServerState::g_StatusMutex);
9892 for (auto & world : ServerState::g_WorldInstances) {
9993 if (world.mapID == zoneID && world.instanceID == instanceID) {
10094 world.players ++;
@@ -111,7 +105,6 @@ namespace MasterPacketHandler {
111105 }
112106
113107 void PlayerRemoved::Handle () {
114- std::lock_guard<std::mutex> lock (ServerState::g_StatusMutex);
115108 for (auto & world : ServerState::g_WorldInstances) {
116109 if (world.mapID == zoneID && world.instanceID == instanceID) {
117110 if (world.players > 0 ) world.players --;
@@ -129,8 +122,6 @@ namespace MasterPacketHandler {
129122 }
130123
131124 void ShutdownResponse::Handle () {
132- std::lock_guard<std::mutex> lock (ServerState::g_StatusMutex);
133-
134125 switch (serverType) {
135126 case ServiceType::AUTH:
136127 ServerState::g_AuthStatus.online = false ;
@@ -163,47 +154,4 @@ namespace MasterPacketHandler {
163154 LOG (" Received SHUTDOWN command from Master" );
164155 Game::lastSignal = -1 ; // Trigger shutdown
165156 }
166-
167- void HandleMasterPacket (Packet* packet) {
168- if (!packet) return ;
169-
170- switch (packet->data [0 ]) {
171- case ID_DISCONNECTION_NOTIFICATION:
172- case ID_CONNECTION_LOST:
173- LOG (" Lost connection to Master Server" );
174- {
175- std::lock_guard<std::mutex> lock (ServerState::g_StatusMutex);
176- ServerState::g_AuthStatus.online = false ;
177- ServerState::g_ChatStatus.online = false ;
178- ServerState::g_WorldInstances.clear ();
179- }
180- break ;
181- case ID_CONNECTION_REQUEST_ACCEPTED:
182- LOG (" Connected to Master Server" );
183- break ;
184- case ID_USER_PACKET_ENUM: {
185- RakNet::BitStream inStream (packet->data , packet->length , false );
186- uint64_t header{};
187- inStream.Read (header);
188-
189- const auto packetType = static_cast <MessageType::Master>(header);
190- LOG_DEBUG (" Received Master packet type: %i" , packetType);
191-
192- auto it = g_Handlers.find (packetType);
193- if (it != g_Handlers.end ()) {
194- auto handler = it->second ();
195- if (!handler->Deserialize (inStream)) {
196- LOG_DEBUG (" Error deserializing Master packet type %i" , packetType);
197- return ;
198- }
199- handler->Handle ();
200- } else {
201- LOG_DEBUG (" Unhandled Master packet type: %i" , packetType);
202- }
203- break ;
204- }
205- default :
206- break ;
207- }
208- }
209157}
0 commit comments