mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 04:32:06 +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:
		| @@ -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])) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 David Markowitz
					David Markowitz