mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 05:27:19 +00:00
chore: Consolidate logger setup and add better handling of packets (#1389)
* Logger to Server class Dont handle master packets from our clients * move to namespace Revert "remove extra headers" This reverts commit ac7b901ece22165cdb0f38fca4be7d8fdf004de8. remove extra headers no changes otherwise. * Merge branch 'main' into server_consolidation_of_work * Update WorldServer.cpp * fix submodule version --------- Co-authored-by: Aaron Kimbre <aronwk.aaron@gmail.com>
This commit is contained in:
parent
0dc6763a3c
commit
0c104e819d
@ -314,6 +314,7 @@ add_subdirectory(dGame)
|
|||||||
add_subdirectory(dZoneManager)
|
add_subdirectory(dZoneManager)
|
||||||
add_subdirectory(dNavigation)
|
add_subdirectory(dNavigation)
|
||||||
add_subdirectory(dPhysics)
|
add_subdirectory(dPhysics)
|
||||||
|
add_subdirectory(dServer)
|
||||||
|
|
||||||
# Create a list of common libraries shared between all binaries
|
# Create a list of common libraries shared between all binaries
|
||||||
set(COMMON_LIBRARIES "dCommon" "dDatabase" "dNet" "raknet" "mariadbConnCpp" "magic_enum")
|
set(COMMON_LIBRARIES "dCommon" "dDatabase" "dNet" "raknet" "mariadbConnCpp" "magic_enum")
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
#include "eAuthMessageType.h"
|
#include "eAuthMessageType.h"
|
||||||
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "Server.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Game {
|
namespace Game {
|
||||||
Logger* logger = nullptr;
|
Logger* logger = nullptr;
|
||||||
dServer* server = nullptr;
|
dServer* server = nullptr;
|
||||||
@ -33,7 +36,6 @@ namespace Game {
|
|||||||
std::mt19937 randomEngine;
|
std::mt19937 randomEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger();
|
|
||||||
void HandlePacket(Packet* packet);
|
void HandlePacket(Packet* packet);
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
@ -46,14 +48,11 @@ int main(int argc, char** argv) {
|
|||||||
std::signal(SIGINT, Game::OnSignal);
|
std::signal(SIGINT, Game::OnSignal);
|
||||||
std::signal(SIGTERM, Game::OnSignal);
|
std::signal(SIGTERM, Game::OnSignal);
|
||||||
|
|
||||||
//Create all the objects we need to run our service:
|
|
||||||
Game::logger = SetupLogger();
|
|
||||||
if (!Game::logger) return EXIT_FAILURE;
|
|
||||||
|
|
||||||
//Read our config:
|
|
||||||
Game::config = new dConfig("authconfig.ini");
|
Game::config = new dConfig("authconfig.ini");
|
||||||
Game::logger->SetLogToConsole(Game::config->GetValue("log_to_console") != "0");
|
|
||||||
Game::logger->SetLogDebugStatements(Game::config->GetValue("log_debug_statements") == "1");
|
//Create all the objects we need to run our service:
|
||||||
|
Server::SetupLogger("AuthServer");
|
||||||
|
if (!Game::logger) return EXIT_FAILURE;
|
||||||
|
|
||||||
LOG("Starting Auth server...");
|
LOG("Starting Auth server...");
|
||||||
LOG("Version: %s", PROJECT_VERSION);
|
LOG("Version: %s", PROJECT_VERSION);
|
||||||
@ -162,18 +161,6 @@ int main(int argc, char** argv) {
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger() {
|
|
||||||
std::string logPath = (BinaryPathFinder::GetBinaryDir() / ("logs/AuthServer_" + std::to_string(time(nullptr)) + ".log")).string();
|
|
||||||
bool logToConsole = false;
|
|
||||||
bool logDebugStatements = false;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
logToConsole = true;
|
|
||||||
logDebugStatements = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return new Logger(logPath, logToConsole, logDebugStatements);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandlePacket(Packet* packet) {
|
void HandlePacket(Packet* packet) {
|
||||||
if (packet->length < 4) return;
|
if (packet->length < 4) return;
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
add_executable(AuthServer "AuthServer.cpp")
|
add_executable(AuthServer "AuthServer.cpp")
|
||||||
target_link_libraries(AuthServer ${COMMON_LIBRARIES})
|
|
||||||
|
target_link_libraries(AuthServer ${COMMON_LIBRARIES} dServer)
|
||||||
|
|
||||||
|
target_include_directories(AuthServer PRIVATE ${PROJECT_SOURCE_DIR}/dServer)
|
||||||
|
|
||||||
add_compile_definitions(AuthServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
add_compile_definitions(AuthServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
||||||
|
@ -6,7 +6,9 @@ set(DCHATSERVER_SOURCES
|
|||||||
|
|
||||||
add_executable(ChatServer "ChatServer.cpp")
|
add_executable(ChatServer "ChatServer.cpp")
|
||||||
add_library(dChatServer ${DCHATSERVER_SOURCES})
|
add_library(dChatServer ${DCHATSERVER_SOURCES})
|
||||||
|
target_include_directories(dChatServer PRIVATE ${PROJECT_SOURCE_DIR}/dServer)
|
||||||
add_compile_definitions(ChatServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
add_compile_definitions(ChatServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
||||||
|
|
||||||
target_link_libraries(dChatServer ${COMMON_LIBRARIES} dChatFilter)
|
target_link_libraries(dChatServer ${COMMON_LIBRARIES} dChatFilter)
|
||||||
target_link_libraries(ChatServer ${COMMON_LIBRARIES} dChatFilter dChatServer)
|
target_link_libraries(ChatServer ${COMMON_LIBRARIES} dChatFilter dChatServer dServer)
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "ChatIgnoreList.h"
|
#include "ChatIgnoreList.h"
|
||||||
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "Server.h"
|
||||||
|
|
||||||
//RakNet includes:
|
//RakNet includes:
|
||||||
#include "RakNetDefines.h"
|
#include "RakNetDefines.h"
|
||||||
@ -38,7 +39,6 @@ namespace Game {
|
|||||||
PlayerContainer playerContainer;
|
PlayerContainer playerContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger();
|
|
||||||
void HandlePacket(Packet* packet);
|
void HandlePacket(Packet* packet);
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
@ -51,14 +51,13 @@ int main(int argc, char** argv) {
|
|||||||
std::signal(SIGINT, Game::OnSignal);
|
std::signal(SIGINT, Game::OnSignal);
|
||||||
std::signal(SIGTERM, Game::OnSignal);
|
std::signal(SIGTERM, Game::OnSignal);
|
||||||
|
|
||||||
|
Game::config = new dConfig("chatconfig.ini");
|
||||||
|
|
||||||
//Create all the objects we need to run our service:
|
//Create all the objects we need to run our service:
|
||||||
Game::logger = SetupLogger();
|
Server::SetupLogger("ChatServer");
|
||||||
if (!Game::logger) return EXIT_FAILURE;
|
if (!Game::logger) return EXIT_FAILURE;
|
||||||
|
|
||||||
//Read our config:
|
//Read our config:
|
||||||
Game::config = new dConfig("chatconfig.ini");
|
|
||||||
Game::logger->SetLogToConsole(Game::config->GetValue("log_to_console") != "0");
|
|
||||||
Game::logger->SetLogDebugStatements(Game::config->GetValue("log_debug_statements") == "1");
|
|
||||||
|
|
||||||
LOG("Starting Chat server...");
|
LOG("Starting Chat server...");
|
||||||
LOG("Version: %s", PROJECT_VERSION);
|
LOG("Version: %s", PROJECT_VERSION);
|
||||||
@ -182,18 +181,6 @@ int main(int argc, char** argv) {
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger() {
|
|
||||||
std::string logPath = (BinaryPathFinder::GetBinaryDir() / ("logs/ChatServer_" + std::to_string(time(nullptr)) + ".log")).string();
|
|
||||||
bool logToConsole = false;
|
|
||||||
bool logDebugStatements = false;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
logToConsole = true;
|
|
||||||
logDebugStatements = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return new Logger(logPath, logToConsole, logDebugStatements);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandlePacket(Packet* packet) {
|
void HandlePacket(Packet* packet) {
|
||||||
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
||||||
LOG("A server has disconnected, erasing their connected players from the list.");
|
LOG("A server has disconnected, erasing their connected players from the list.");
|
||||||
|
@ -9,7 +9,8 @@ add_executable(MasterServer "MasterServer.cpp")
|
|||||||
add_compile_definitions(MasterServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
add_compile_definitions(MasterServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
||||||
|
|
||||||
target_link_libraries(dMasterServer ${COMMON_LIBRARIES})
|
target_link_libraries(dMasterServer ${COMMON_LIBRARIES})
|
||||||
target_link_libraries(MasterServer ${COMMON_LIBRARIES} dMasterServer)
|
target_link_libraries(MasterServer ${COMMON_LIBRARIES} dMasterServer dServer)
|
||||||
|
target_include_directories(dMasterServer PRIVATE ${PROJECT_SOURCE_DIR}/dServer)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
add_dependencies(MasterServer WorldServer AuthServer ChatServer)
|
add_dependencies(MasterServer WorldServer AuthServer ChatServer)
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "FdbToSqlite.h"
|
#include "FdbToSqlite.h"
|
||||||
#include "BitStreamUtils.h"
|
#include "BitStreamUtils.h"
|
||||||
#include "Start.h"
|
#include "Start.h"
|
||||||
|
#include "Server.h"
|
||||||
|
|
||||||
namespace Game {
|
namespace Game {
|
||||||
Logger* logger = nullptr;
|
Logger* logger = nullptr;
|
||||||
@ -55,7 +56,6 @@ namespace Game {
|
|||||||
bool shutdownSequenceStarted = false;
|
bool shutdownSequenceStarted = false;
|
||||||
int ShutdownSequence(int32_t signal = -1);
|
int ShutdownSequence(int32_t signal = -1);
|
||||||
int32_t FinalizeShutdown(int32_t signal = -1);
|
int32_t FinalizeShutdown(int32_t signal = -1);
|
||||||
Logger* SetupLogger();
|
|
||||||
void HandlePacket(Packet* packet);
|
void HandlePacket(Packet* packet);
|
||||||
std::map<uint32_t, std::string> activeSessions;
|
std::map<uint32_t, std::string> activeSessions;
|
||||||
SystemAddress authServerMasterPeerSysAddr;
|
SystemAddress authServerMasterPeerSysAddr;
|
||||||
@ -77,8 +77,10 @@ int main(int argc, char** argv) {
|
|||||||
std::signal(SIGINT, Game::OnSignal);
|
std::signal(SIGINT, Game::OnSignal);
|
||||||
std::signal(SIGTERM, Game::OnSignal);
|
std::signal(SIGTERM, Game::OnSignal);
|
||||||
|
|
||||||
|
Game::config = new dConfig("masterconfig.ini");
|
||||||
|
|
||||||
//Create all the objects we need to run our service:
|
//Create all the objects we need to run our service:
|
||||||
Game::logger = SetupLogger();
|
Server::SetupLogger("MasterServer");
|
||||||
if (!Game::logger) return EXIT_FAILURE;
|
if (!Game::logger) return EXIT_FAILURE;
|
||||||
|
|
||||||
if (!dConfig::Exists("authconfig.ini")) LOG("Could not find authconfig.ini, using default settings");
|
if (!dConfig::Exists("authconfig.ini")) LOG("Could not find authconfig.ini, using default settings");
|
||||||
@ -87,9 +89,6 @@ int main(int argc, char** argv) {
|
|||||||
if (!dConfig::Exists("sharedconfig.ini")) LOG("Could not find sharedconfig.ini, using default settings");
|
if (!dConfig::Exists("sharedconfig.ini")) LOG("Could not find sharedconfig.ini, using default settings");
|
||||||
if (!dConfig::Exists("worldconfig.ini")) LOG("Could not find worldconfig.ini, using default settings");
|
if (!dConfig::Exists("worldconfig.ini")) LOG("Could not find worldconfig.ini, using default settings");
|
||||||
|
|
||||||
Game::config = new dConfig("masterconfig.ini");
|
|
||||||
Game::logger->SetLogToConsole(Game::config->GetValue("log_to_console") != "0");
|
|
||||||
Game::logger->SetLogDebugStatements(Game::config->GetValue("log_debug_statements") == "1");
|
|
||||||
|
|
||||||
uint32_t clientNetVersion = 171022;
|
uint32_t clientNetVersion = 171022;
|
||||||
const auto clientNetVersionString = Game::config->GetValue("client_net_version");
|
const auto clientNetVersionString = Game::config->GetValue("client_net_version");
|
||||||
@ -395,19 +394,6 @@ int main(int argc, char** argv) {
|
|||||||
return ShutdownSequence(EXIT_SUCCESS);
|
return ShutdownSequence(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger() {
|
|
||||||
std::string logPath =
|
|
||||||
(BinaryPathFinder::GetBinaryDir() / ("logs/MasterServer_" + std::to_string(time(nullptr)) + ".log")).string();
|
|
||||||
bool logToConsole = false;
|
|
||||||
bool logDebugStatements = false;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
logToConsole = true;
|
|
||||||
logDebugStatements = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return new Logger(logPath, logToConsole, logDebugStatements);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandlePacket(Packet* packet) {
|
void HandlePacket(Packet* packet) {
|
||||||
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION) {
|
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION) {
|
||||||
LOG("A server has disconnected");
|
LOG("A server has disconnected");
|
||||||
|
6
dServer/CMakeLists.txt
Normal file
6
dServer/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
set(DSERVER_SOURCES
|
||||||
|
"Server.cpp")
|
||||||
|
|
||||||
|
add_library(dServer STATIC ${DSERVER_SOURCES})
|
||||||
|
|
||||||
|
target_include_directories(dServer PUBLIC ".")
|
29
dServer/Server.cpp
Normal file
29
dServer/Server.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include "Server.h"
|
||||||
|
|
||||||
|
#include "BinaryPathFinder.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "Logger.h"
|
||||||
|
#include "dConfig.h"
|
||||||
|
|
||||||
|
void Server::SetupLogger(const std::string_view serviceName) {
|
||||||
|
if (Game::logger) {
|
||||||
|
LOG("A logger has already been setup, skipping.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto logsDir = BinaryPathFinder::GetBinaryDir() / "logs";
|
||||||
|
|
||||||
|
if (!std::filesystem::exists(logsDir)) std::filesystem::create_directory(logsDir);
|
||||||
|
|
||||||
|
std::string logPath = (logsDir / serviceName).string() + "_" + std::to_string(time(nullptr)) + ".log";
|
||||||
|
bool logToConsole = false;
|
||||||
|
bool logDebugStatements = false;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
logToConsole = true;
|
||||||
|
logDebugStatements = true;
|
||||||
|
#endif
|
||||||
|
Game::logger = new Logger(logPath, logToConsole, logDebugStatements);
|
||||||
|
|
||||||
|
Game::logger->SetLogToConsole(Game::config->GetValue("log_to_console") != "0");
|
||||||
|
Game::logger->SetLogDebugStatements(Game::config->GetValue("log_debug_statements") == "1");
|
||||||
|
}
|
10
dServer/Server.h
Normal file
10
dServer/Server.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef __SERVER__H__
|
||||||
|
#define __SERVER__H__
|
||||||
|
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
|
namespace Server {
|
||||||
|
void SetupLogger(const std::string_view serviceName);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__SERVER__H__
|
@ -7,5 +7,6 @@ add_executable(WorldServer "WorldServer.cpp")
|
|||||||
add_compile_definitions(WorldServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
add_compile_definitions(WorldServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
||||||
|
|
||||||
target_link_libraries(dWorldServer ${COMMON_LIBRARIES})
|
target_link_libraries(dWorldServer ${COMMON_LIBRARIES})
|
||||||
target_link_libraries(WorldServer ${COMMON_LIBRARIES} dChatFilter dGame dZoneManager dPhysics Detour Recast tinyxml2 dWorldServer dNavigation)
|
target_link_libraries(WorldServer ${COMMON_LIBRARIES} dChatFilter dGame dZoneManager dPhysics Detour Recast tinyxml2 dWorldServer dNavigation dServer)
|
||||||
|
target_include_directories(WorldServer PRIVATE ${PROJECT_SOURCE_DIR}/dServer)
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@
|
|||||||
#include "CheatDetection.h"
|
#include "CheatDetection.h"
|
||||||
#include "eGameMasterLevel.h"
|
#include "eGameMasterLevel.h"
|
||||||
#include "StringifiedEnum.h"
|
#include "StringifiedEnum.h"
|
||||||
|
#include "Server.h"
|
||||||
|
|
||||||
namespace Game {
|
namespace Game {
|
||||||
Logger* logger = nullptr;
|
Logger* logger = nullptr;
|
||||||
@ -102,8 +103,8 @@ void WorldShutdownProcess(uint32_t zoneId);
|
|||||||
void FinalizeShutdown();
|
void FinalizeShutdown();
|
||||||
void SendShutdownMessageToMaster();
|
void SendShutdownMessageToMaster();
|
||||||
|
|
||||||
Logger* SetupLogger(uint32_t zoneID, uint32_t instanceID);
|
|
||||||
void HandlePacketChat(Packet* packet);
|
void HandlePacketChat(Packet* packet);
|
||||||
|
void HandleMasterPacket(Packet* packet);
|
||||||
void HandlePacket(Packet* packet);
|
void HandlePacket(Packet* packet);
|
||||||
|
|
||||||
struct tempSessionInfo {
|
struct tempSessionInfo {
|
||||||
@ -143,14 +144,11 @@ int main(int argc, char** argv) {
|
|||||||
if (argument == "-port") ourPort = atoi(argv[i + 1]);
|
if (argument == "-port") ourPort = atoi(argv[i + 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create all the objects we need to run our service:
|
|
||||||
Game::logger = SetupLogger(zoneID, instanceID);
|
|
||||||
if (!Game::logger) return EXIT_FAILURE;
|
|
||||||
|
|
||||||
//Read our config:
|
|
||||||
Game::config = new dConfig("worldconfig.ini");
|
Game::config = new dConfig("worldconfig.ini");
|
||||||
Game::logger->SetLogToConsole(Game::config->GetValue("log_to_console") != "0");
|
|
||||||
Game::logger->SetLogDebugStatements(Game::config->GetValue("log_debug_statements") == "1");
|
//Create all the objects we need to run our service:
|
||||||
|
Server::SetupLogger("WorldServer_" + std::to_string(zoneID) + "_" + std::to_string(instanceID));
|
||||||
|
if (!Game::logger) return EXIT_FAILURE;
|
||||||
|
|
||||||
LOG("Starting World server...");
|
LOG("Starting World server...");
|
||||||
LOG("Version: %s", Game::projectVersion.c_str());
|
LOG("Version: %s", Game::projectVersion.c_str());
|
||||||
@ -412,7 +410,7 @@ int main(int argc, char** argv) {
|
|||||||
//Check for packets here:
|
//Check for packets here:
|
||||||
packet = Game::server->ReceiveFromMaster();
|
packet = Game::server->ReceiveFromMaster();
|
||||||
if (packet) { //We can get messages not handle-able by the dServer class, so handle them if we returned anything.
|
if (packet) { //We can get messages not handle-able by the dServer class, so handle them if we returned anything.
|
||||||
HandlePacket(packet);
|
HandleMasterPacket(packet);
|
||||||
Game::server->DeallocateMasterPacket(packet);
|
Game::server->DeallocateMasterPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,18 +527,6 @@ int main(int argc, char** argv) {
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* SetupLogger(uint32_t zoneID, uint32_t instanceID) {
|
|
||||||
std::string logPath = (BinaryPathFinder::GetBinaryDir() / ("logs/WorldServer_" + std::to_string(zoneID) + "_" + std::to_string(instanceID) + "_" + std::to_string(time(nullptr)) + ".log")).string();
|
|
||||||
bool logToConsole = false;
|
|
||||||
bool logDebugStatements = false;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
logToConsole = true;
|
|
||||||
logDebugStatements = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return new Logger(logPath, logToConsole, logDebugStatements);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandlePacketChat(Packet* packet) {
|
void HandlePacketChat(Packet* packet) {
|
||||||
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
||||||
LOG("Lost our connection to chat, zone(%i), instance(%i)", Game::server->GetZoneID(), Game::server->GetInstanceID());
|
LOG("Lost our connection to chat, zone(%i), instance(%i)", Game::server->GetZoneID(), Game::server->GetInstanceID());
|
||||||
@ -672,65 +658,9 @@ void HandlePacketChat(Packet* packet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandlePacket(Packet* packet) {
|
void HandleMasterPacket(Packet* packet) {
|
||||||
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
|
||||||
auto user = UserManager::Instance()->GetUser(packet->systemAddress);
|
|
||||||
if (!user) return;
|
|
||||||
|
|
||||||
auto c = user->GetLastUsedChar();
|
if (static_cast<eConnectionType>(packet->data[1]) != eConnectionType::MASTER || packet->length < 4) return;
|
||||||
if (!c) {
|
|
||||||
UserManager::Instance()->DeleteUser(packet->systemAddress);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto* entity = Game::entityManager->GetEntity(c->GetObjectID());
|
|
||||||
|
|
||||||
if (!entity) {
|
|
||||||
entity = Player::GetPlayer(packet->systemAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity) {
|
|
||||||
auto* skillComponent = entity->GetComponent<SkillComponent>();
|
|
||||||
|
|
||||||
if (skillComponent != nullptr) {
|
|
||||||
skillComponent->Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
entity->GetCharacter()->SaveXMLToDatabase();
|
|
||||||
|
|
||||||
LOG("Deleting player %llu", entity->GetObjectID());
|
|
||||||
|
|
||||||
Game::entityManager->DestroyEntity(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
CBITSTREAM;
|
|
||||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::PLAYER_REMOVED_NOTIFICATION);
|
|
||||||
bitStream.Write(user->GetLoggedInChar());
|
|
||||||
Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
UserManager::Instance()->DeleteUser(packet->systemAddress);
|
|
||||||
|
|
||||||
if (PropertyManagementComponent::Instance() != nullptr) {
|
|
||||||
PropertyManagementComponent::Instance()->Save();
|
|
||||||
}
|
|
||||||
|
|
||||||
CBITSTREAM;
|
|
||||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, eMasterMessageType::PLAYER_REMOVED);
|
|
||||||
bitStream.Write((LWOMAPID)Game::server->GetZoneID());
|
|
||||||
bitStream.Write((LWOINSTANCEID)instanceID);
|
|
||||||
Game::server->SendToMaster(&bitStream);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet->data[0] != ID_USER_PACKET_ENUM || packet->length < 4) return;
|
|
||||||
if (static_cast<eConnectionType>(packet->data[1]) == eConnectionType::SERVER) {
|
|
||||||
if (static_cast<eServerMessageType>(packet->data[3]) == eServerMessageType::VERSION_CONFIRM) {
|
|
||||||
AuthPackets::HandleHandshake(Game::server, packet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (static_cast<eConnectionType>(packet->data[1]) == eConnectionType::MASTER) {
|
|
||||||
switch (static_cast<eMasterMessageType>(packet->data[3])) {
|
switch (static_cast<eMasterMessageType>(packet->data[3])) {
|
||||||
case eMasterMessageType::REQUEST_PERSISTENT_ID_RESPONSE: {
|
case eMasterMessageType::REQUEST_PERSISTENT_ID_RESPONSE: {
|
||||||
uint64_t requestID = PacketUtils::ReadU64(8, packet);
|
uint64_t requestID = PacketUtils::ReadU64(8, packet);
|
||||||
@ -739,12 +669,6 @@ void HandlePacket(Packet* packet) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case eMasterMessageType::REQUEST_ZONE_TRANSFER_RESPONSE: {
|
|
||||||
uint64_t requestID = PacketUtils::ReadU64(8, packet);
|
|
||||||
ZoneInstanceManager::Instance()->HandleRequestZoneTransferResponse(requestID, packet);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case eMasterMessageType::SESSION_KEY_RESPONSE: {
|
case eMasterMessageType::SESSION_KEY_RESPONSE: {
|
||||||
//Read our session key and to which user it belongs:
|
//Read our session key and to which user it belongs:
|
||||||
RakNet::BitStream inStream(packet->data, packet->length, false);
|
RakNet::BitStream inStream(packet->data, packet->length, false);
|
||||||
@ -861,14 +785,69 @@ void HandlePacket(Packet* packet) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LOG("Unknown packet ID from master %i", int(packet->data[3]));
|
LOG("Unknown packet ID from master %i", int(packet->data[3]));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandlePacket(Packet* packet) {
|
||||||
|
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
||||||
|
auto user = UserManager::Instance()->GetUser(packet->systemAddress);
|
||||||
|
if (!user) return;
|
||||||
|
|
||||||
|
auto c = user->GetLastUsedChar();
|
||||||
|
if (!c) {
|
||||||
|
UserManager::Instance()->DeleteUser(packet->systemAddress);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto* entity = Game::entityManager->GetEntity(c->GetObjectID());
|
||||||
|
|
||||||
|
if (!entity) {
|
||||||
|
entity = Player::GetPlayer(packet->systemAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity) {
|
||||||
|
auto* skillComponent = entity->GetComponent<SkillComponent>();
|
||||||
|
|
||||||
|
if (skillComponent != nullptr) {
|
||||||
|
skillComponent->Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
entity->GetCharacter()->SaveXMLToDatabase();
|
||||||
|
|
||||||
|
LOG("Deleting player %llu", entity->GetObjectID());
|
||||||
|
|
||||||
|
Game::entityManager->DestroyEntity(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
CBITSTREAM;
|
||||||
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::PLAYER_REMOVED_NOTIFICATION);
|
||||||
|
bitStream.Write(user->GetLoggedInChar());
|
||||||
|
Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager::Instance()->DeleteUser(packet->systemAddress);
|
||||||
|
|
||||||
|
if (PropertyManagementComponent::Instance() != nullptr) {
|
||||||
|
PropertyManagementComponent::Instance()->Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
CBITSTREAM;
|
||||||
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, eMasterMessageType::PLAYER_REMOVED);
|
||||||
|
bitStream.Write((LWOMAPID)Game::server->GetZoneID());
|
||||||
|
bitStream.Write((LWOINSTANCEID)instanceID);
|
||||||
|
Game::server->SendToMaster(&bitStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet->data[0] != ID_USER_PACKET_ENUM || packet->length < 4) return;
|
||||||
|
if (static_cast<eConnectionType>(packet->data[1]) == eConnectionType::SERVER) {
|
||||||
|
if (static_cast<eServerMessageType>(packet->data[3]) == eServerMessageType::VERSION_CONFIRM) {
|
||||||
|
AuthPackets::HandleHandshake(Game::server, packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (static_cast<eConnectionType>(packet->data[1]) != eConnectionType::WORLD) return;
|
if (static_cast<eConnectionType>(packet->data[1]) != eConnectionType::WORLD) return;
|
||||||
|
|
||||||
switch (static_cast<eWorldMessageType>(packet->data[3])) {
|
switch (static_cast<eWorldMessageType>(packet->data[3])) {
|
||||||
|
Loading…
Reference in New Issue
Block a user