From 3364884126a64af4c0512b25282d9c2b8010367d Mon Sep 17 00:00:00 2001 From: jadebenn Date: Wed, 20 Aug 2025 22:26:48 -0500 Subject: [PATCH] Consolidate serviceID enums into one enum (#1855) * merge ServerType and ServiceID enums * rename eConnectionType to ServiceType in preparation for enum unification * unify ServiceID and ServiceType enums * shrink ServiceType to an 8-bit integer * fix linux compilation error and update gamemsg test * return to uint16_t * Update dNet/AuthPackets.cpp Use cast instead of padding Co-authored-by: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> * Add default case to MasterServer.cpp * move ref back to type * Another formatting fix * Fix comment to be more accurate --------- Co-authored-by: jadebenn <9892985+jadebenn@users.noreply.github.com> Co-authored-by: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> --- dAuthServer/AuthServer.cpp | 8 ++--- dChatServer/ChatIgnoreList.cpp | 4 +-- dChatServer/ChatPacketHandler.cpp | 36 +++++++++---------- dChatServer/ChatServer.cpp | 12 +++---- dChatServer/PlayerContainer.cpp | 4 +-- dChatServer/TeamContainer.cpp | 18 +++++----- dCommon/dEnums/ServiceType.h | 14 ++++++++ dCommon/dEnums/dCommonVars.h | 4 +-- dCommon/dEnums/eConnectionType.h | 14 -------- dGame/Entity.cpp | 2 +- dGame/UserManager.cpp | 6 ++-- dGame/dBehaviors/BehaviorContext.cpp | 6 ++-- dGame/dComponents/ActivityComponent.cpp | 4 +-- .../RocketLaunchpadControlComponent.cpp | 4 +-- dGame/dComponents/SkillComponent.cpp | 6 ++-- dGame/dGameMessages/GameMessageHandler.cpp | 6 ++-- dGame/dGameMessages/GameMessages.cpp | 8 ++--- dGame/dUtilities/Mail.cpp | 2 +- dGame/dUtilities/Mail.h | 2 +- dGame/dUtilities/SlashCommandHandler.cpp | 2 +- .../SlashCommands/DEVGMCommands.cpp | 2 +- .../GMGreaterThanZeroCommands.cpp | 2 +- dMasterServer/InstanceManager.cpp | 6 ++-- dMasterServer/MasterServer.cpp | 34 +++++++++--------- dNet/AuthPackets.cpp | 26 +++++++------- dNet/AuthPackets.h | 4 +-- dNet/BitStreamUtils.cpp | 3 +- dNet/BitStreamUtils.h | 10 +++--- dNet/ChatPackets.cpp | 14 ++++---- dNet/ChatPackets.h | 6 ++-- dNet/MasterPackets.cpp | 18 +++++----- dNet/PacketUtils.h | 2 +- dNet/WorldPackets.cpp | 24 ++++++------- dNet/dServer.cpp | 16 ++++----- dNet/dServer.h | 22 +++--------- dWorldServer/WorldServer.cpp | 32 ++++++++--------- .../dGameMessagesTests/GameMessageTests.cpp | 7 ++-- 37 files changed, 188 insertions(+), 202 deletions(-) create mode 100644 dCommon/dEnums/ServiceType.h delete mode 100644 dCommon/dEnums/eConnectionType.h diff --git a/dAuthServer/AuthServer.cpp b/dAuthServer/AuthServer.cpp index eefbb13e..1905fa73 100644 --- a/dAuthServer/AuthServer.cpp +++ b/dAuthServer/AuthServer.cpp @@ -20,7 +20,7 @@ //Auth includes: #include "AuthPackets.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Server.h" #include "MessageType/Auth.h" @@ -92,7 +92,7 @@ int main(int argc, char** argv) { const auto externalIPString = Game::config->GetValue("external_ip"); if (!externalIPString.empty()) ourIP = externalIPString; - Game::server = new dServer(ourIP, ourPort, 0, maxClients, false, true, Game::logger, masterIP, masterPort, ServerType::Auth, Game::config, &Game::lastSignal, masterPassword); + Game::server = new dServer(ourIP, ourPort, 0, maxClients, false, true, Game::logger, masterIP, masterPort, ServiceType::AUTH, Game::config, &Game::lastSignal, masterPassword); //Run it until server gets a kill message from Master: auto t = std::chrono::high_resolution_clock::now(); @@ -167,11 +167,11 @@ void HandlePacket(Packet* packet) { if (packet->length < 4) return; if (packet->data[0] == ID_USER_PACKET_ENUM) { - if (static_cast(packet->data[1]) == eConnectionType::SERVER) { + if (static_cast(packet->data[1]) == ServiceType::COMMON) { if (static_cast(packet->data[3]) == MessageType::Server::VERSION_CONFIRM) { AuthPackets::HandleHandshake(Game::server, packet); } - } else if (static_cast(packet->data[1]) == eConnectionType::AUTH) { + } else if (static_cast(packet->data[1]) == ServiceType::AUTH) { if (static_cast(packet->data[3]) == MessageType::Auth::LOGIN_REQUEST) { AuthPackets::HandleLoginRequest(Game::server, packet); } diff --git a/dChatServer/ChatIgnoreList.cpp b/dChatServer/ChatIgnoreList.cpp index 8c0f2f26..025d56dc 100644 --- a/dChatServer/ChatIgnoreList.cpp +++ b/dChatServer/ChatIgnoreList.cpp @@ -13,11 +13,11 @@ // The only thing not auto-handled is instance activities force joining the team on the server. void WriteOutgoingReplyHeader(RakNet::BitStream& bitStream, const LWOOBJID& receivingPlayer, const MessageType::Client type) { - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receivingPlayer); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, type); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, type); } void ChatIgnoreList::GetIgnoreList(Packet* packet) { diff --git a/dChatServer/ChatPacketHandler.cpp b/dChatServer/ChatPacketHandler.cpp index 5722dfa0..80d1a26f 100644 --- a/dChatServer/ChatPacketHandler.cpp +++ b/dChatServer/ChatPacketHandler.cpp @@ -12,7 +12,7 @@ #include "RakString.h" #include "dConfig.h" #include "eObjectBits.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Chat.h" #include "MessageType/Client.h" #include "MessageType/Game.h" @@ -61,11 +61,11 @@ void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) { //Now, we need to send the friendlist to the server they came from: CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(playerID); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::GET_FRIENDS_LIST_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::GET_FRIENDS_LIST_RESPONSE); bitStream.Write(0); bitStream.Write(1); //Length of packet -- just writing one as it doesn't matter, client skips it. bitStream.Write(player.friends.size()); @@ -375,10 +375,10 @@ void ChatPacketHandler::HandleWho(Packet* packet) { bool online = player; CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(request.requestor); - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::WHO_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::WHO_RESPONSE); bitStream.Write(online); bitStream.Write(player.zoneID.GetMapID()); bitStream.Write(player.zoneID.GetInstanceID()); @@ -398,10 +398,10 @@ void ChatPacketHandler::HandleShowAll(Packet* packet) { if (!sender) return; CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(request.requestor); - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::SHOW_ALL_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::SHOW_ALL_RESPONSE); bitStream.Write(!request.displayZoneData && !request.displayIndividualPlayers); bitStream.Write(Game::playerContainer.GetPlayerCount()); bitStream.Write(Game::playerContainer.GetSimCount()); @@ -533,7 +533,7 @@ void ChatPacketHandler::OnAchievementNotify(RakNet::BitStream& bitstream, const LOG_DEBUG("Sending achievement notify to %s", notify.targetPlayerName.GetAsString().c_str()); RakNet::BitStream worldStream; - BitStreamUtils::WriteHeader(worldStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(worldStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); worldStream.Write(friendData.playerID); notify.WriteHeader(worldStream); notify.Serialize(worldStream); @@ -544,10 +544,10 @@ void ChatPacketHandler::OnAchievementNotify(RakNet::BitStream& bitstream, const void ChatPacketHandler::SendPrivateChatMessage(const PlayerData& sender, const PlayerData& receiver, const PlayerData& routeTo, const LUWString& message, const eChatChannel channel, const eChatMessageResponseCode responseCode) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(routeTo.playerID); - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::PRIVATE_CHAT_MESSAGE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::PRIVATE_CHAT_MESSAGE); bitStream.Write(sender.playerID); bitStream.Write(channel); bitStream.Write(0); // not used @@ -579,11 +579,11 @@ void ChatPacketHandler::SendFriendUpdate(const PlayerData& friendData, const Pla [bool] - is FTP*/ CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(friendData.playerID); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::UPDATE_FRIEND_NOTIFY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::UPDATE_FRIEND_NOTIFY); bitStream.Write(notifyType); std::string playerName = playerData.playerName.c_str(); @@ -616,11 +616,11 @@ void ChatPacketHandler::SendFriendRequest(const PlayerData& receiver, const Play } CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::ADD_FRIEND_REQUEST); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::ADD_FRIEND_REQUEST); bitStream.Write(LUWString(sender.playerName)); bitStream.Write(0); // This is a BFF flag however this is unused in live and does not have an implementation client side. @@ -630,11 +630,11 @@ void ChatPacketHandler::SendFriendRequest(const PlayerData& receiver, const Play void ChatPacketHandler::SendFriendResponse(const PlayerData& receiver, const PlayerData& sender, eAddFriendResponseType responseCode, uint8_t isBestFriendsAlready, uint8_t isBestFriendRequest) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); // Portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::ADD_FRIEND_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::ADD_FRIEND_RESPONSE); bitStream.Write(responseCode); // For all requests besides accepted, write a flag that says whether or not we are already best friends with the receiver. bitStream.Write(responseCode != eAddFriendResponseType::ACCEPTED ? isBestFriendsAlready : sender.worldServerSysAddr != UNASSIGNED_SYSTEM_ADDRESS); @@ -653,11 +653,11 @@ void ChatPacketHandler::SendFriendResponse(const PlayerData& receiver, const Pla void ChatPacketHandler::SendRemoveFriend(const PlayerData& receiver, std::string& personToRemove, bool isSuccessful) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::REMOVE_FRIEND_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::REMOVE_FRIEND_RESPONSE); bitStream.Write(isSuccessful); //isOnline bitStream.Write(LUWString(personToRemove)); diff --git a/dChatServer/ChatServer.cpp b/dChatServer/ChatServer.cpp index abc7d779..9cabbf28 100644 --- a/dChatServer/ChatServer.cpp +++ b/dChatServer/ChatServer.cpp @@ -13,7 +13,7 @@ #include "Diagnostics.h" #include "AssetManager.h" #include "BinaryPathFinder.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "PlayerContainer.h" #include "ChatPacketHandler.h" #include "MessageType/Chat.h" @@ -123,7 +123,7 @@ int main(int argc, char** argv) { const auto externalIPString = Game::config->GetValue("external_ip"); if (!externalIPString.empty()) ourIP = externalIPString; - Game::server = new dServer(ourIP, ourPort, 0, maxClients, false, true, Game::logger, masterIP, masterPort, ServerType::Chat, Game::config, &Game::lastSignal, masterPassword); + Game::server = new dServer(ourIP, ourPort, 0, maxClients, false, true, Game::logger, masterIP, masterPort, ServiceType::CHAT, Game::config, &Game::lastSignal, masterPassword); const bool dontGenerateDCF = GeneralUtils::TryParse(Game::config->GetValue("dont_generate_dcf")).value_or(false); Game::chatFilter = new dChatFilter(Game::assetManager->GetResPath().string() + "/chatplus_en_us", dontGenerateDCF); @@ -218,11 +218,11 @@ void HandlePacket(Packet* packet) { CINSTREAM; inStream.SetReadOffset(BYTES_TO_BITS(1)); - eConnectionType connection; - MessageType::Chat chatMessageID; - + ServiceType connection; inStream.Read(connection); - if (connection != eConnectionType::CHAT) return; + if (connection != ServiceType::CHAT) return; + + MessageType::Chat chatMessageID; inStream.Read(chatMessageID); // Our packing byte wasnt there? Probably a false packet diff --git a/dChatServer/PlayerContainer.cpp b/dChatServer/PlayerContainer.cpp index fac6501d..6c75fd1d 100644 --- a/dChatServer/PlayerContainer.cpp +++ b/dChatServer/PlayerContainer.cpp @@ -8,7 +8,7 @@ #include "GeneralUtils.h" #include "BitStreamUtils.h" #include "Database.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "ChatPackets.h" #include "dConfig.h" #include "MessageType/Chat.h" @@ -147,7 +147,7 @@ void PlayerContainer::MuteUpdate(Packet* packet) { void PlayerContainer::BroadcastMuteUpdate(LWOOBJID player, time_t time) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GM_MUTE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GM_MUTE); bitStream.Write(player); bitStream.Write(time); diff --git a/dChatServer/TeamContainer.cpp b/dChatServer/TeamContainer.cpp index 024a0464..bbdab0ac 100644 --- a/dChatServer/TeamContainer.cpp +++ b/dChatServer/TeamContainer.cpp @@ -264,11 +264,11 @@ void TeamContainer::HandleTeamStatusRequest(Packet* packet) { void TeamContainer::SendTeamInvite(const PlayerData& receiver, const PlayerData& sender) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::TEAM_INVITE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::TEAM_INVITE); bitStream.Write(LUWString(sender.playerName.c_str())); bitStream.Write(sender.playerID); @@ -279,7 +279,7 @@ void TeamContainer::SendTeamInvite(const PlayerData& receiver, const PlayerData& void TeamContainer::SendTeamInviteConfirm(const PlayerData& receiver, bool bLeaderIsFreeTrial, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, uint8_t ucResponseCode, std::u16string wsLeaderName) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -306,7 +306,7 @@ void TeamContainer::SendTeamInviteConfirm(const PlayerData& receiver, bool bLead void TeamContainer::SendTeamStatus(const PlayerData& receiver, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, std::u16string wsLeaderName) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -331,7 +331,7 @@ void TeamContainer::SendTeamStatus(const PlayerData& receiver, LWOOBJID i64Leade void TeamContainer::SendTeamSetLeader(const PlayerData& receiver, LWOOBJID i64PlayerID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -348,7 +348,7 @@ void TeamContainer::SendTeamSetLeader(const PlayerData& receiver, LWOOBJID i64Pl void TeamContainer::SendTeamAddPlayer(const PlayerData& receiver, bool bIsFreeTrial, bool bLocal, bool bNoLootOnDeath, LWOOBJID i64PlayerID, std::u16string wsPlayerName, LWOZONEID zoneID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -377,7 +377,7 @@ void TeamContainer::SendTeamAddPlayer(const PlayerData& receiver, bool bIsFreeTr void TeamContainer::SendTeamRemovePlayer(const PlayerData& receiver, bool bDisband, bool bIsKicked, bool bIsLeaving, bool bLocal, LWOOBJID i64LeaderID, LWOOBJID i64PlayerID, std::u16string wsPlayerName) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -403,7 +403,7 @@ void TeamContainer::SendTeamRemovePlayer(const PlayerData& receiver, bool bDisba void TeamContainer::SendTeamSetOffWorldFlag(const PlayerData& receiver, LWOOBJID i64PlayerID, LWOZONEID zoneID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(receiver.playerID); //portion that will get routed: @@ -652,7 +652,7 @@ void TeamContainer::TeamStatusUpdate(TeamData* team) { void TeamContainer::UpdateTeamsOnWorld(TeamData* team, bool deleteTeam) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::TEAM_GET_STATUS); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::TEAM_GET_STATUS); bitStream.Write(team->teamID); bitStream.Write(deleteTeam); diff --git a/dCommon/dEnums/ServiceType.h b/dCommon/dEnums/ServiceType.h new file mode 100644 index 00000000..92c9c7bd --- /dev/null +++ b/dCommon/dEnums/ServiceType.h @@ -0,0 +1,14 @@ +#ifndef __SERVICETYPE__H__ +#define __SERVICETYPE__H__ + +enum class ServiceType : uint16_t { + COMMON = 0, + AUTH, + CHAT, + WORLD = 4, + CLIENT, + MASTER, + UNKNOWN +}; + +#endif //!__SERVICETYPE__H__ diff --git a/dCommon/dEnums/dCommonVars.h b/dCommon/dEnums/dCommonVars.h index 75dcc73d..f9efa2c6 100644 --- a/dCommon/dEnums/dCommonVars.h +++ b/dCommon/dEnums/dCommonVars.h @@ -10,7 +10,7 @@ #include "BitStream.h" #include "BitStreamUtils.h" #include "MessageType/Client.h" -#include "eConnectionType.h" +#include "ServiceType.h" #pragma warning (disable:4251) //Disables SQL warnings @@ -34,7 +34,7 @@ constexpr uint32_t lowFrameDelta = FRAMES_TO_MS(lowFramerate); #define CBITSTREAM RakNet::BitStream bitStream; #define CINSTREAM RakNet::BitStream inStream(packet->data, packet->length, false); #define CINSTREAM_SKIP_HEADER CINSTREAM if (inStream.GetNumberOfUnreadBits() >= BYTES_TO_BITS(HEADER_SIZE)) inStream.IgnoreBytes(HEADER_SIZE); else inStream.IgnoreBits(inStream.GetNumberOfUnreadBits()); -#define CMSGHEADER BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); +#define CMSGHEADER BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::GAME_MSG); #define SEND_PACKET Game::server->Send(bitStream, sysAddr, false); #define SEND_PACKET_BROADCAST Game::server->Send(bitStream, UNASSIGNED_SYSTEM_ADDRESS, true); diff --git a/dCommon/dEnums/eConnectionType.h b/dCommon/dEnums/eConnectionType.h deleted file mode 100644 index ed75e100..00000000 --- a/dCommon/dEnums/eConnectionType.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __ECONNECTIONTYPE__H__ -#define __ECONNECTIONTYPE__H__ - -enum class eConnectionType : uint16_t { - SERVER = 0, - AUTH, - CHAT, - WORLD = 4, - CLIENT, - MASTER, - UNKNOWN -}; - -#endif //!__ECONNECTIONTYPE__H__ diff --git a/dGame/Entity.cpp b/dGame/Entity.cpp index 73325f8f..4af8fdd1 100644 --- a/dGame/Entity.cpp +++ b/dGame/Entity.cpp @@ -902,7 +902,7 @@ void Entity::SetGMLevel(eGameMasterLevel value) { // Update the chat server of our GM Level { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GMLEVEL_UPDATE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GMLEVEL_UPDATE); bitStream.Write(m_ObjectID); bitStream.Write(m_GMLevel); diff --git a/dGame/UserManager.cpp b/dGame/UserManager.cpp index 886e3415..6b742b27 100644 --- a/dGame/UserManager.cpp +++ b/dGame/UserManager.cpp @@ -25,7 +25,7 @@ #include "eGameMasterLevel.h" #include "eCharacterCreationResponse.h" #include "eRenameResponse.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Chat.h" #include "BitStreamUtils.h" #include "CheatDetection.h" @@ -217,7 +217,7 @@ void UserManager::RequestCharacterList(const SystemAddress& sysAddr) { } RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::CHARACTER_LIST_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::CHARACTER_LIST_RESPONSE); std::vector characters = u->GetCharacters(); bitStream.Write(characters.size()); @@ -427,7 +427,7 @@ void UserManager::DeleteCharacter(const SystemAddress& sysAddr, Packet* packet) Database::Get()->DeleteCharacter(charID); CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); bitStream.Write(objectID); Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false); diff --git a/dGame/dBehaviors/BehaviorContext.cpp b/dGame/dBehaviors/BehaviorContext.cpp index 452df3ad..c8c126b6 100644 --- a/dGame/dBehaviors/BehaviorContext.cpp +++ b/dGame/dBehaviors/BehaviorContext.cpp @@ -16,7 +16,7 @@ #include "QuickBuildComponent.h" #include "eReplicaComponentType.h" #include "TeamManager.h" -#include "eConnectionType.h" +#include "ServiceType.h" BehaviorSyncEntry::BehaviorSyncEntry() { } @@ -212,7 +212,7 @@ void BehaviorContext::UpdatePlayerSyncs(float deltaTime) { echo.sBitStream.assign(reinterpret_cast(bitStream.GetData()), bitStream.GetNumberOfBytesUsed()); RakNet::BitStream message; - BitStreamUtils::WriteHeader(message, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(message, ServiceType::CLIENT, MessageType::Client::GAME_MSG); message.Write(this->originator); echo.Serialize(message); @@ -285,7 +285,7 @@ bool BehaviorContext::CalculateUpdate(const float deltaTime) { // Write message RakNet::BitStream message; - BitStreamUtils::WriteHeader(message, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(message, ServiceType::CLIENT, MessageType::Client::GAME_MSG); message.Write(this->originator); echo.Serialize(message); diff --git a/dGame/dComponents/ActivityComponent.cpp b/dGame/dComponents/ActivityComponent.cpp index 9f256a3e..5958d184 100644 --- a/dGame/dComponents/ActivityComponent.cpp +++ b/dGame/dComponents/ActivityComponent.cpp @@ -20,7 +20,7 @@ #include "Loot.h" #include "eMissionTaskType.h" #include "eMatchUpdate.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Chat.h" #include "CDCurrencyTableTable.h" @@ -512,7 +512,7 @@ void ActivityInstance::StartZone() { // only make a team if we have more than one participant if (participants.size() > 1) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::CREATE_TEAM); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::CREATE_TEAM); bitStream.Write(leader->GetObjectID()); bitStream.Write(m_Participants.size()); diff --git a/dGame/dComponents/RocketLaunchpadControlComponent.cpp b/dGame/dComponents/RocketLaunchpadControlComponent.cpp index 8fde926b..746a161a 100644 --- a/dGame/dComponents/RocketLaunchpadControlComponent.cpp +++ b/dGame/dComponents/RocketLaunchpadControlComponent.cpp @@ -17,7 +17,7 @@ #include "dServer.h" #include "BitStreamUtils.h" #include "eObjectWorldState.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Master.h" RocketLaunchpadControlComponent::RocketLaunchpadControlComponent(Entity* parent, int rocketId) : Component(parent) { @@ -137,7 +137,7 @@ LWOCLONEID RocketLaunchpadControlComponent::GetSelectedCloneId(LWOOBJID player) void RocketLaunchpadControlComponent::TellMasterToPrepZone(int zoneID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::PREP_ZONE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::PREP_ZONE); bitStream.Write(zoneID); Game::server->SendToMaster(bitStream); } diff --git a/dGame/dComponents/SkillComponent.cpp b/dGame/dComponents/SkillComponent.cpp index e16e3a2e..3fee3b24 100644 --- a/dGame/dComponents/SkillComponent.cpp +++ b/dGame/dComponents/SkillComponent.cpp @@ -23,7 +23,7 @@ #include "DoClientProjectileImpact.h" #include "CDClientManager.h" #include "CDSkillBehaviorTable.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Client.h" ProjectileSyncEntry::ProjectileSyncEntry() { @@ -326,7 +326,7 @@ SkillExecutionResult SkillComponent::CalculateBehavior( // Write message RakNet::BitStream message; - BitStreamUtils::WriteHeader(message, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(message, ServiceType::CLIENT, MessageType::Client::GAME_MSG); message.Write(this->m_Parent->GetObjectID()); start.Serialize(message); @@ -457,7 +457,7 @@ void SkillComponent::SyncProjectileCalculation(const ProjectileSyncEntry& entry) RakNet::BitStream message; - BitStreamUtils::WriteHeader(message, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(message, ServiceType::CLIENT, MessageType::Client::GAME_MSG); message.Write(this->m_Parent->GetObjectID()); projectileImpact.Serialize(message); diff --git a/dGame/dGameMessages/GameMessageHandler.cpp b/dGame/dGameMessages/GameMessageHandler.cpp index 60af60c7..eae01e56 100644 --- a/dGame/dGameMessages/GameMessageHandler.cpp +++ b/dGame/dGameMessages/GameMessageHandler.cpp @@ -32,7 +32,7 @@ #include "EchoSyncSkill.h" #include "eMissionTaskType.h" #include "eReplicaComponentType.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Game.h" #include "ePlayerFlag.h" #include "dConfig.h" @@ -353,7 +353,7 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream& inStream, const System if (success) { //Broadcast our startSkill: RakNet::BitStream bitStreamLocal; - BitStreamUtils::WriteHeader(bitStreamLocal, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(bitStreamLocal, ServiceType::CLIENT, MessageType::Client::GAME_MSG); bitStreamLocal.Write(entity->GetObjectID()); EchoStartSkill echoStartSkill; @@ -375,7 +375,7 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream& inStream, const System case MessageType::Game::SYNC_SKILL: { RakNet::BitStream bitStreamLocal; - BitStreamUtils::WriteHeader(bitStreamLocal, eConnectionType::CLIENT, MessageType::Client::GAME_MSG); + BitStreamUtils::WriteHeader(bitStreamLocal, ServiceType::CLIENT, MessageType::Client::GAME_MSG); bitStreamLocal.Write(entity->GetObjectID()); SyncSkill sync = SyncSkill(inStream); // inStream replaced &bitStream diff --git a/dGame/dGameMessages/GameMessages.cpp b/dGame/dGameMessages/GameMessages.cpp index 61061771..64583b61 100644 --- a/dGame/dGameMessages/GameMessages.cpp +++ b/dGame/dGameMessages/GameMessages.cpp @@ -40,7 +40,7 @@ #include "eQuickBuildFailReason.h" #include "eControlScheme.h" #include "eStateChangeType.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "ePlayerFlag.h" #include @@ -2208,7 +2208,7 @@ void GameMessages::HandleUnUseModel(RakNet::BitStream& inStream, Entity* entity, if (unknown) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); bitStream.Write(LWOOBJID_EMPTY); //always zero so that a check on the client passes bitStream.Write(eBlueprintSaveResponseType::PlacementFailed); // Sending a non-zero error code here prevents the client from deleting its in progress build for some reason? bitStream.Write(0); @@ -2460,7 +2460,7 @@ void GameMessages::HandleBBBLoadItemRequest(RakNet::BitStream& inStream, Entity* void GameMessages::SendBlueprintLoadItemResponse(const SystemAddress& sysAddr, bool success, LWOOBJID oldItemId, LWOOBJID newItemId) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::BLUEPRINT_LOAD_RESPONSE_ITEMID); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::BLUEPRINT_LOAD_RESPONSE_ITEMID); bitStream.Write(success); bitStream.Write(oldItemId); bitStream.Write(newItemId); @@ -2652,7 +2652,7 @@ void GameMessages::HandleBBBSaveRequest(RakNet::BitStream& inStream, Entity* ent uint32_t sd0Size{}; for (const auto& chunk : newSd0) sd0Size += chunk.size(); CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); bitStream.Write(localId); bitStream.Write(eBlueprintSaveResponseType::EverythingWorked); bitStream.Write(1); diff --git a/dGame/dUtilities/Mail.cpp b/dGame/dUtilities/Mail.cpp index 2e807c73..0a93ced0 100644 --- a/dGame/dUtilities/Mail.cpp +++ b/dGame/dUtilities/Mail.cpp @@ -25,7 +25,7 @@ #include "WorldConfig.h" #include "eMissionTaskType.h" #include "eReplicaComponentType.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "User.h" #include "StringifiedEnum.h" diff --git a/dGame/dUtilities/Mail.h b/dGame/dUtilities/Mail.h index 059b28b1..9c83025f 100644 --- a/dGame/dUtilities/Mail.h +++ b/dGame/dUtilities/Mail.h @@ -109,7 +109,7 @@ namespace Mail { Entity* player = nullptr; MailLUBitStream() = default; - MailLUBitStream(eMessageID _messageID) : LUBitStream(eConnectionType::CLIENT, MessageType::Client::MAIL), messageID{_messageID} {}; + MailLUBitStream(eMessageID _messageID) : LUBitStream(ServiceType::CLIENT, MessageType::Client::MAIL), messageID{_messageID} {}; virtual void Serialize(RakNet::BitStream& bitStream) const override; virtual bool Deserialize(RakNet::BitStream& bitStream) override; diff --git a/dGame/dUtilities/SlashCommandHandler.cpp b/dGame/dUtilities/SlashCommandHandler.cpp index 904509a6..f65fae32 100644 --- a/dGame/dUtilities/SlashCommandHandler.cpp +++ b/dGame/dUtilities/SlashCommandHandler.cpp @@ -153,7 +153,7 @@ void SlashCommandHandler::SendAnnouncement(const std::string& title, const std:: //Notify chat about it CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GM_ANNOUNCE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GM_ANNOUNCE); bitStream.Write(title.size()); for (auto character : title) { diff --git a/dGame/dUtilities/SlashCommands/DEVGMCommands.cpp b/dGame/dUtilities/SlashCommands/DEVGMCommands.cpp index afbceaf3..01109322 100644 --- a/dGame/dUtilities/SlashCommands/DEVGMCommands.cpp +++ b/dGame/dUtilities/SlashCommands/DEVGMCommands.cpp @@ -507,7 +507,7 @@ namespace DEVGMCommands { void ShutdownUniverse(Entity* entity, const SystemAddress& sysAddr, const std::string args) { //Tell the master server that we're going to be shutting down whole "universe": CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SHUTDOWN_UNIVERSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SHUTDOWN_UNIVERSE); Game::server->SendToMaster(bitStream); ChatPackets::SendSystemMessage(sysAddr, u"Sent universe shutdown notification to master."); diff --git a/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp b/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp index 5c710c09..b31291fe 100644 --- a/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp +++ b/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp @@ -197,7 +197,7 @@ namespace GMGreaterThanZeroCommands { //Notify chat about it CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GM_MUTE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GM_MUTE); bitStream.Write(characterId); bitStream.Write(expire); diff --git a/dMasterServer/InstanceManager.cpp b/dMasterServer/InstanceManager.cpp index 7dba4802..2a402f87 100644 --- a/dMasterServer/InstanceManager.cpp +++ b/dMasterServer/InstanceManager.cpp @@ -9,7 +9,7 @@ #include "CDZoneTableTable.h" #include "MasterPackets.h" #include "BitStreamUtils.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Master.h" #include "Start.h" @@ -172,7 +172,7 @@ void InstanceManager::RequestAffirmation(const InstancePtr& instance, const Pend CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::AFFIRM_TRANSFER_REQUEST); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::AFFIRM_TRANSFER_REQUEST); bitStream.Write(request.id); @@ -343,7 +343,7 @@ bool Instance::GetShutdownComplete() const { void Instance::Shutdown() { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SHUTDOWN); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SHUTDOWN); Game::server->Send(bitStream, this->m_SysAddr, false); diff --git a/dMasterServer/MasterServer.cpp b/dMasterServer/MasterServer.cpp index 52bc0eac..38abdc71 100644 --- a/dMasterServer/MasterServer.cpp +++ b/dMasterServer/MasterServer.cpp @@ -23,7 +23,7 @@ #include "dServer.h" #include "AssetManager.h" #include "BinaryPathFinder.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Master.h" //RakNet includes: @@ -343,7 +343,7 @@ int main(int argc, char** argv) { int res = GenerateBCryptPassword(!cfgPassword.empty() ? cfgPassword : "3.25DARKFLAME1", 13, salt, hash); assert(res == 0); - Game::server = new dServer(ourIP, ourPort, 0, maxClients, true, false, Game::logger, "", 0, ServerType::Master, Game::config, &Game::lastSignal, hash); + Game::server = new dServer(ourIP, ourPort, 0, maxClients, true, false, Game::logger, "", 0, ServiceType::MASTER, Game::config, &Game::lastSignal, hash); std::string master_server_ip = "localhost"; const auto masterServerIPString = Game::config->GetValue("master_ip"); @@ -530,7 +530,7 @@ void HandlePacket(Packet* packet) { if (packet->length < 4) return; - if (static_cast(packet->data[1]) == eConnectionType::MASTER) { + if (static_cast(packet->data[1]) == ServiceType::MASTER) { switch (static_cast(packet->data[3])) { case MessageType::Master::REQUEST_PERSISTENT_ID: { LOG("A persistent ID req"); @@ -592,7 +592,7 @@ void HandlePacket(Packet* packet) { uint32_t theirPort = 0; uint32_t theirZoneID = 0; uint32_t theirInstanceID = 0; - ServerType theirServerType; + ServiceType theirServerType; LUString theirIP; inStream.Read(theirPort); @@ -601,10 +601,10 @@ void HandlePacket(Packet* packet) { inStream.Read(theirServerType); inStream.Read(theirIP); - if (theirServerType == ServerType::World) { + switch (theirServerType) { + case ServiceType::WORLD: if (!Game::im->IsPortInUse(theirPort)) { auto in = std::make_unique(theirIP.string, theirPort, theirZoneID, theirInstanceID, 0, 12, 12); - in->SetSysAddr(packet->systemAddress); Game::im->AddInstance(in); } else { @@ -613,14 +613,16 @@ void HandlePacket(Packet* packet) { instance->SetSysAddr(packet->systemAddress); } } - } - - if (theirServerType == ServerType::Chat) { + break; + case ServiceType::CHAT: chatServerMasterPeerSysAddr = packet->systemAddress; - } - - if (theirServerType == ServerType::Auth) { - authServerMasterPeerSysAddr = packet->systemAddress; + break; + case ServiceType::AUTH: + authServerMasterPeerSysAddr = packet->systemAddress; + break; + default: + // We just ignore any other server type + break; } LOG("Received %s server info, instance: %i port: %i", StringifiedEnum::ToString(theirServerType).data(), theirInstanceID, theirPort); @@ -640,7 +642,7 @@ void HandlePacket(Packet* packet) { activeSessions.erase(it.first); CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::NEW_SESSION_ALERT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::NEW_SESSION_ALERT); bitStream.Write(sessionKey); bitStream.Write(username); SEND_PACKET_BROADCAST; @@ -662,7 +664,7 @@ void HandlePacket(Packet* packet) { for (auto key : activeSessions) { if (key.second == username.GetAsString()) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SESSION_KEY_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SESSION_KEY_RESPONSE); bitStream.Write(key.first); bitStream.Write(username); Game::server->Send(bitStream, packet->systemAddress, false); @@ -873,7 +875,7 @@ int ShutdownSequence(int32_t signal) { { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SHUTDOWN); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SHUTDOWN); Game::server->Send(bitStream, UNASSIGNED_SYSTEM_ADDRESS, true); LOG("Triggered master shutdown"); } diff --git a/dNet/AuthPackets.cpp b/dNet/AuthPackets.cpp index bdce0e30..a46ed9f1 100644 --- a/dNet/AuthPackets.cpp +++ b/dNet/AuthPackets.cpp @@ -19,7 +19,7 @@ #include "dConfig.h" #include "eServerDisconnectIdentifiers.h" #include "eLoginResponse.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Server.h" #include "MessageType/Master.h" #include "eGameMasterLevel.h" @@ -51,9 +51,10 @@ void AuthPackets::HandleHandshake(dServer* server, Packet* packet) { inStream.Read(clientVersion); inStream.IgnoreBytes(4); - ServiceId serviceId; - inStream.Read(serviceId); - if (serviceId != ServiceId::Client) LOG("WARNING: Service ID is not a Client!"); + ServiceType serviceType; + inStream.Read(serviceType); + if (serviceType != ServiceType::CLIENT) LOG("WARNING: Service is not a Client!"); + inStream.IgnoreBytes(2); uint32_t processID; inStream.Read(processID); @@ -64,24 +65,21 @@ void AuthPackets::HandleHandshake(dServer* server, Packet* packet) { inStream.IgnoreBytes(33); - LOG_DEBUG("Client Data [Version: %i, Service: %s, Process: %u, Port: %u, Sysaddr Port: %u]", clientVersion, StringifiedEnum::ToString(serviceId).data(), processID, port, packet->systemAddress.port); + LOG_DEBUG("Client Data [Version: %i, Service: %s, Process: %u, Port: %u, Sysaddr Port: %u]", clientVersion, StringifiedEnum::ToString(serviceType).data(), processID, port, packet->systemAddress.port); SendHandshake(server, packet->systemAddress, server->GetIP(), server->GetPort(), server->GetServerType()); } -void AuthPackets::SendHandshake(dServer* server, const SystemAddress& sysAddr, const std::string& nextServerIP, uint16_t nextServerPort, const ServerType serverType) { +void AuthPackets::SendHandshake(dServer* server, const SystemAddress& sysAddr, const std::string& nextServerIP, uint16_t nextServerPort, const ServiceType serverType) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::SERVER, MessageType::Server::VERSION_CONFIRM); + BitStreamUtils::WriteHeader(bitStream, ServiceType::COMMON, MessageType::Server::VERSION_CONFIRM); - const auto clientNetVersionString = Game::config->GetValue("client_net_version"); + const auto& clientNetVersionString = Game::config->GetValue("client_net_version"); const uint32_t clientNetVersion = GeneralUtils::TryParse(clientNetVersionString).value_or(171022); bitStream.Write(clientNetVersion); bitStream.Write(861228100); - - if (serverType == ServerType::Auth) bitStream.Write(ServiceId::Auth); - else if (serverType == ServerType::World) bitStream.Write(ServiceId::World); - else bitStream.Write(ServiceId::General); + bitStream.Write(static_cast(serverType)); bitStream.Write(219818307120); server->Send(bitStream, sysAddr, false); @@ -234,7 +232,7 @@ void AuthPackets::HandleLoginRequest(dServer* server, Packet* packet) { void AuthPackets::SendLoginResponse(dServer* server, const SystemAddress& sysAddr, eLoginResponse responseCode, const std::string& errorMsg, const std::string& wServerIP, uint16_t wServerPort, std::string username, std::vector& stamps) { stamps.emplace_back(eStamps::PASSPORT_AUTH_IM_LOGIN_START, 1); RakNet::BitStream loginResponse; - BitStreamUtils::WriteHeader(loginResponse, eConnectionType::CLIENT, MessageType::Client::LOGIN_RESPONSE); + BitStreamUtils::WriteHeader(loginResponse, ServiceType::CLIENT, MessageType::Client::LOGIN_RESPONSE); loginResponse.Write(responseCode); @@ -304,7 +302,7 @@ void AuthPackets::SendLoginResponse(dServer* server, const SystemAddress& sysAdd //Inform the master server that we've created a session for this user: if (responseCode == eLoginResponse::SUCCESS) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SET_SESSION_KEY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SET_SESSION_KEY); bitStream.Write(sessionKey); bitStream.Write(LUString(username)); server->SendToMaster(bitStream); diff --git a/dNet/AuthPackets.h b/dNet/AuthPackets.h index ee1e4586..156862eb 100644 --- a/dNet/AuthPackets.h +++ b/dNet/AuthPackets.h @@ -6,8 +6,8 @@ #include "dNetCommon.h" #include "magic_enum.hpp" -enum class ServerType : uint32_t; enum class eLoginResponse : uint8_t; +enum class ServiceType : uint16_t; class dServer; enum class eStamps : uint32_t { @@ -93,7 +93,7 @@ enum class Language : uint32_t { namespace AuthPackets { void HandleHandshake(dServer* server, Packet* packet); - void SendHandshake(dServer* server, const SystemAddress& sysAddr, const std::string& nextServerIP, uint16_t nextServerPort, const ServerType serverType); + void SendHandshake(dServer* server, const SystemAddress& sysAddr, const std::string& nextServerIP, uint16_t nextServerPort, const ServiceType serverType); void HandleLoginRequest(dServer* server, Packet* packet); void SendLoginResponse(dServer* server, const SystemAddress& sysAddr, eLoginResponse responseCode, const std::string& errorMsg, const std::string& wServerIP, uint16_t wServerPort, std::string username, std::vector& stamps); diff --git a/dNet/BitStreamUtils.cpp b/dNet/BitStreamUtils.cpp index 047a1227..91273785 100644 --- a/dNet/BitStreamUtils.cpp +++ b/dNet/BitStreamUtils.cpp @@ -17,8 +17,7 @@ bool LUBitStream::ReadHeader(RakNet::BitStream& bitStream) { if (messageID != ID_USER_PACKET_ENUM) return false; VALIDATE_READ(bitStream.Read(this->connectionType)); VALIDATE_READ(bitStream.Read(this->internalPacketID)); - uint8_t padding; - VALIDATE_READ(bitStream.Read(padding)); + bitStream.IgnoreBytes(1); return true; } diff --git a/dNet/BitStreamUtils.h b/dNet/BitStreamUtils.h index b9fdae42..24d8c4dc 100644 --- a/dNet/BitStreamUtils.h +++ b/dNet/BitStreamUtils.h @@ -4,7 +4,7 @@ #include "GeneralUtils.h" #include "BitStream.h" #include "MessageIdentifiers.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include #include @@ -47,13 +47,13 @@ struct LUWString { }; struct LUBitStream { - eConnectionType connectionType = eConnectionType::UNKNOWN; + ServiceType connectionType = ServiceType::UNKNOWN; uint32_t internalPacketID = 0xFFFFFFFF; LUBitStream() = default; template - LUBitStream(eConnectionType connectionType, T internalPacketID) { + LUBitStream(ServiceType connectionType, T internalPacketID) { this->connectionType = connectionType; this->internalPacketID = static_cast(internalPacketID); } @@ -71,9 +71,9 @@ struct LUBitStream { namespace BitStreamUtils { template - void WriteHeader(RakNet::BitStream& bitStream, eConnectionType connectionType, T internalPacketID) { + void WriteHeader(RakNet::BitStream& bitStream, ServiceType connectionType, T internalPacketID) { bitStream.Write(ID_USER_PACKET_ENUM); - bitStream.Write(connectionType); + bitStream.Write(connectionType); bitStream.Write(static_cast(internalPacketID)); bitStream.Write(0); } diff --git a/dNet/ChatPackets.cpp b/dNet/ChatPackets.cpp index 470374dc..86622ad1 100644 --- a/dNet/ChatPackets.cpp +++ b/dNet/ChatPackets.cpp @@ -9,11 +9,11 @@ #include "Game.h" #include "BitStreamUtils.h" #include "dServer.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Chat.h" void ShowAllRequest::Serialize(RakNet::BitStream& bitStream) { - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::SHOW_ALL); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::SHOW_ALL); bitStream.Write(this->requestor); bitStream.Write(this->displayZoneData); bitStream.Write(this->displayIndividualPlayers); @@ -26,7 +26,7 @@ void ShowAllRequest::Deserialize(RakNet::BitStream& inStream) { } void FindPlayerRequest::Serialize(RakNet::BitStream& bitStream) { - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WHO); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WHO); bitStream.Write(this->requestor); bitStream.Write(this->playerName); } @@ -38,7 +38,7 @@ void FindPlayerRequest::Deserialize(RakNet::BitStream& inStream) { void ChatPackets::SendChatMessage(const SystemAddress& sysAddr, char chatChannel, const std::string& senderName, LWOOBJID playerObjectID, bool senderMythran, const std::u16string& message) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE); bitStream.Write(0); bitStream.Write(chatChannel); @@ -60,7 +60,7 @@ void ChatPackets::SendChatMessage(const SystemAddress& sysAddr, char chatChannel void ChatPackets::SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE); bitStream.Write(0); bitStream.Write(4); @@ -92,7 +92,7 @@ void ChatPackets::SendMessageFail(const SystemAddress& sysAddr) { //0x01 - "Upgrade to a full LEGO Universe Membership to chat with other players." CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::SEND_CANNED_TEXT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::SEND_CANNED_TEXT); bitStream.Write(0); //response type, options above ^ //docs say there's a wstring here-- no idea what it's for, or if it's even needed so leaving it as is for now. SEND_PACKET; @@ -139,7 +139,7 @@ void ChatPackets::TeamInviteInitialResponse::Serialize(RakNet::BitStream& bitstr void ChatPackets::SendRoutedMsg(const LUBitStream& msg, const LWOOBJID targetID, const SystemAddress& sysAddr) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); bitStream.Write(targetID); // Now write the actual packet diff --git a/dNet/ChatPackets.h b/dNet/ChatPackets.h index 58bb9a1d..53d0eced 100644 --- a/dNet/ChatPackets.h +++ b/dNet/ChatPackets.h @@ -34,7 +34,7 @@ namespace ChatPackets { std::string title; std::string message; - Announcement() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GM_ANNOUNCE) {}; + Announcement() : LUBitStream(ServiceType::CHAT, MessageType::Chat::GM_ANNOUNCE) {}; virtual void Serialize(RakNet::BitStream& bitStream) const override; }; @@ -43,7 +43,7 @@ namespace ChatPackets { uint32_t missionEmailID{}; LWOOBJID earningPlayerID{}; LUWString earnerName{}; - AchievementNotify() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::ACHIEVEMENT_NOTIFY) {} + AchievementNotify() : LUBitStream(ServiceType::CHAT, MessageType::Chat::ACHIEVEMENT_NOTIFY) {} void Serialize(RakNet::BitStream& bitstream) const override; bool Deserialize(RakNet::BitStream& bitstream) override; }; @@ -51,7 +51,7 @@ namespace ChatPackets { struct TeamInviteInitialResponse : public LUBitStream { bool inviteFailedToSend{}; LUWString playerName{}; - TeamInviteInitialResponse() : LUBitStream(eConnectionType::CLIENT, MessageType::Client::TEAM_INVITE_INITIAL_RESPONSE) {} + TeamInviteInitialResponse() : LUBitStream(ServiceType::CLIENT, MessageType::Client::TEAM_INVITE_INITIAL_RESPONSE) {} void Serialize(RakNet::BitStream& bitstream) const override; // No Deserialize needed on our end diff --git a/dNet/MasterPackets.cpp b/dNet/MasterPackets.cpp index e15cab67..36a23f4f 100644 --- a/dNet/MasterPackets.cpp +++ b/dNet/MasterPackets.cpp @@ -2,7 +2,7 @@ #include "BitStream.h" #include "dCommonVars.h" #include "dServer.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Master.h" #include "BitStreamUtils.h" @@ -10,14 +10,14 @@ void MasterPackets::SendPersistentIDRequest(dServer* server, uint64_t requestID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_PERSISTENT_ID); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_PERSISTENT_ID); bitStream.Write(requestID); server->SendToMaster(bitStream); } void MasterPackets::SendPersistentIDResponse(dServer* server, const SystemAddress& sysAddr, uint64_t requestID, uint32_t objID) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_PERSISTENT_ID_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_PERSISTENT_ID_RESPONSE); bitStream.Write(requestID); bitStream.Write(objID); @@ -27,7 +27,7 @@ void MasterPackets::SendPersistentIDResponse(dServer* server, const SystemAddres void MasterPackets::SendZoneTransferRequest(dServer* server, uint64_t requestID, bool mythranShift, uint32_t zoneID, uint32_t cloneID) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_ZONE_TRANSFER); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_ZONE_TRANSFER); bitStream.Write(requestID); bitStream.Write(mythranShift); @@ -39,7 +39,7 @@ void MasterPackets::SendZoneTransferRequest(dServer* server, uint64_t requestID, void MasterPackets::SendZoneCreatePrivate(dServer* server, uint32_t zoneID, uint32_t cloneID, const std::string& password) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::CREATE_PRIVATE_ZONE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::CREATE_PRIVATE_ZONE); bitStream.Write(zoneID); bitStream.Write(cloneID); @@ -54,7 +54,7 @@ void MasterPackets::SendZoneCreatePrivate(dServer* server, uint32_t zoneID, uint void MasterPackets::SendZoneRequestPrivate(dServer* server, uint64_t requestID, bool mythranShift, const std::string& password) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_PRIVATE_ZONE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_PRIVATE_ZONE); bitStream.Write(requestID); bitStream.Write(mythranShift); @@ -69,7 +69,7 @@ void MasterPackets::SendZoneRequestPrivate(dServer* server, uint64_t requestID, void MasterPackets::SendWorldReady(dServer* server, LWOMAPID zoneId, LWOINSTANCEID instanceId) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::WORLD_READY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::WORLD_READY); bitStream.Write(zoneId); bitStream.Write(instanceId); @@ -79,7 +79,7 @@ void MasterPackets::SendWorldReady(dServer* server, LWOMAPID zoneId, LWOINSTANCE void MasterPackets::SendZoneTransferResponse(dServer* server, const SystemAddress& sysAddr, uint64_t requestID, bool mythranShift, uint32_t zoneID, uint32_t zoneInstance, uint32_t zoneClone, const std::string& serverIP, uint32_t serverPort) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_ZONE_TRANSFER_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_ZONE_TRANSFER_RESPONSE); bitStream.Write(requestID); bitStream.Write(mythranShift); @@ -111,7 +111,7 @@ void MasterPackets::HandleServerInfo(Packet* packet) { void MasterPackets::SendServerInfo(dServer* server, Packet* packet) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SERVER_INFO); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SERVER_INFO); bitStream.Write(server->GetPort()); bitStream.Write(server->GetZoneID()); diff --git a/dNet/PacketUtils.h b/dNet/PacketUtils.h index 3cd44b5f..cf96bfc0 100644 --- a/dNet/PacketUtils.h +++ b/dNet/PacketUtils.h @@ -5,7 +5,7 @@ #include "BitStream.h" #include -enum class eConnectionType : uint16_t; +enum class ServiceType : uint16_t; namespace PacketUtils { void SavePacket(const std::string& filename, const char* data, size_t length); diff --git a/dNet/WorldPackets.cpp b/dNet/WorldPackets.cpp index dfc92f55..1c9898a9 100644 --- a/dNet/WorldPackets.cpp +++ b/dNet/WorldPackets.cpp @@ -7,7 +7,7 @@ #include "LDFFormat.h" #include "dServer.h" #include "ZCompression.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "BitStreamUtils.h" #include @@ -23,7 +23,7 @@ void HTTPMonitorInfo::Serialize(RakNet::BitStream& bitStream) const { void WorldPackets::SendLoadStaticZone(const SystemAddress& sysAddr, float x, float y, float z, uint32_t checksum, LWOZONEID zone) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::LOAD_STATIC_ZONE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::LOAD_STATIC_ZONE); bitStream.Write(zone.GetMapID()); bitStream.Write(zone.GetInstanceID()); @@ -44,28 +44,28 @@ void WorldPackets::SendLoadStaticZone(const SystemAddress& sysAddr, float x, flo void WorldPackets::SendCharacterCreationResponse(const SystemAddress& sysAddr, eCharacterCreationResponse response) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::CHARACTER_CREATE_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::CHARACTER_CREATE_RESPONSE); bitStream.Write(response); SEND_PACKET; } void WorldPackets::SendCharacterRenameResponse(const SystemAddress& sysAddr, eRenameResponse response) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::CHARACTER_RENAME_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::CHARACTER_RENAME_RESPONSE); bitStream.Write(response); SEND_PACKET; } void WorldPackets::SendCharacterDeleteResponse(const SystemAddress& sysAddr, bool response) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::DELETE_CHARACTER_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::DELETE_CHARACTER_RESPONSE); bitStream.Write(response); SEND_PACKET; } void WorldPackets::SendTransferToWorld(const SystemAddress& sysAddr, const std::string& serverIP, uint32_t serverPort, bool mythranShift) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::TRANSFER_TO_WORLD); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::TRANSFER_TO_WORLD); bitStream.Write(LUString(serverIP)); bitStream.Write(serverPort); @@ -76,7 +76,7 @@ void WorldPackets::SendTransferToWorld(const SystemAddress& sysAddr, const std:: void WorldPackets::SendServerState(const SystemAddress& sysAddr) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::SERVER_STATES); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::SERVER_STATES); bitStream.Write(1); //If the server is receiving this request, it probably is ready anyway. SEND_PACKET; } @@ -84,7 +84,7 @@ void WorldPackets::SendServerState(const SystemAddress& sysAddr) { void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, int64_t reputation, LWOOBJID player, const std::string& xmlData, const std::u16string& username, eGameMasterLevel gm, const LWOCLONEID cloneID) { using namespace std; RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::CREATE_CHARACTER); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::CREATE_CHARACTER); RakNet::BitStream data; @@ -133,7 +133,7 @@ void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, int64_t rep void WorldPackets::SendChatModerationResponse(const SystemAddress& sysAddr, bool requestAccepted, uint32_t requestID, const std::string& receiver, std::set> unacceptedItems) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::CHAT_MODERATION_STRING); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::CHAT_MODERATION_STRING); bitStream.Write(unacceptedItems.empty()); // Is sentence ok? bitStream.Write(0x16); // Source ID, unknown @@ -157,7 +157,7 @@ void WorldPackets::SendChatModerationResponse(const SystemAddress& sysAddr, bool void WorldPackets::SendGMLevelChange(const SystemAddress& sysAddr, bool success, eGameMasterLevel highestLevel, eGameMasterLevel prevLevel, eGameMasterLevel newLevel) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::MAKE_GM_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::MAKE_GM_RESPONSE); bitStream.Write(success); bitStream.Write(static_cast(highestLevel)); @@ -169,14 +169,14 @@ void WorldPackets::SendGMLevelChange(const SystemAddress& sysAddr, bool success, void WorldPackets::SendHTTPMonitorInfo(const SystemAddress& sysAddr, const HTTPMonitorInfo& info) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::HTTP_MONITOR_INFO_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::HTTP_MONITOR_INFO_RESPONSE); info.Serialize(bitStream); SEND_PACKET; } void WorldPackets::SendDebugOuput(const SystemAddress& sysAddr, const std::string& data) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::DEBUG_OUTPUT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::DEBUG_OUTPUT); bitStream.Write(data.size()); bitStream.Write(data); SEND_PACKET; diff --git a/dNet/dServer.cpp b/dNet/dServer.cpp index b743e1f4..0a8e0ab9 100644 --- a/dNet/dServer.cpp +++ b/dNet/dServer.cpp @@ -6,7 +6,7 @@ #include "RakNetworkFactory.h" #include "MessageIdentifiers.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Server.h" #include "MessageType/Master.h" @@ -50,7 +50,7 @@ dServer::dServer( Logger* logger, const std::string masterIP, int masterPort, - ServerType serverType, + ServiceType serverType, dConfig* config, Game::signal_t* lastSignal, const std::string& masterPassword, @@ -87,7 +87,7 @@ dServer::dServer( } else { LOG("FAILED TO START SERVER ON IP/PORT: %s:%i", ip.c_str(), port); #ifdef DARKFLAME_PLATFORM_LINUX - if (mServerType == ServerType::Auth) { + if (mServerType == ServiceType::AUTH) { const auto cwd = BinaryPathFinder::GetBinaryDir(); LOG("Try running the following command before launching again:\n sudo setcap 'cap_net_bind_service=+ep' \"%s/AuthServer\"", cwd.string().c_str()); } @@ -98,7 +98,7 @@ dServer::dServer( mLogger->SetLogToConsole(prevLogSetting); //Connect to master if we are not master: - if (serverType != ServerType::Master) { + if (serverType != ServiceType::MASTER) { SetupForMasterConnection(); if (!ConnectToMaster()) { LOG("Failed ConnectToMaster!"); @@ -106,7 +106,7 @@ dServer::dServer( } //Set up Replica if we're a world server: - if (serverType == ServerType::World) { + if (serverType == ServiceType::WORLD) { mNetIDManager = new NetworkIDManager(); mNetIDManager->SetIsNetworkIDAuthority(true); @@ -151,7 +151,7 @@ Packet* dServer::ReceiveFromMaster() { break; } case ID_USER_PACKET_ENUM: { - if (static_cast(packet->data[1]) == eConnectionType::MASTER) { + if (static_cast(packet->data[1]) == ServiceType::MASTER) { switch (static_cast(packet->data[3])) { case MessageType::Master::REQUEST_ZONE_TRANSFER_RESPONSE: { ZoneInstanceManager::Instance()->HandleRequestZoneTransferResponse(packet); @@ -199,7 +199,7 @@ void dServer::SendToMaster(RakNet::BitStream& bitStream) { void dServer::Disconnect(const SystemAddress& sysAddr, eServerDisconnectIdentifiers disconNotifyID) { RakNet::BitStream bitStream; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::SERVER, MessageType::Server::DISCONNECT_NOTIFY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::COMMON, MessageType::Server::DISCONNECT_NOTIFY); bitStream.Write(disconNotifyID); mPeer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE_ORDERED, 0, sysAddr, false); @@ -257,7 +257,7 @@ void dServer::Shutdown() { mReplicaManager = nullptr; } - if (mServerType != ServerType::Master && mMasterPeer) { + if (mServerType != ServiceType::MASTER && mMasterPeer) { mMasterPeer->Shutdown(1000); RakNetworkFactory::DestroyRakPeerInterface(mMasterPeer); } diff --git a/dNet/dServer.h b/dNet/dServer.h index c25fa1f4..c1b96c1a 100644 --- a/dNet/dServer.h +++ b/dNet/dServer.h @@ -9,21 +9,7 @@ class Logger; class dConfig; enum class eServerDisconnectIdentifiers : uint32_t; - -enum class ServerType : uint32_t { - Master, - Auth, - Chat, - World -}; - -enum class ServiceId : uint32_t{ - General = 0, - Auth = 1, - Chat = 2, - World = 4, - Client = 5, -}; +enum class ServiceType : uint16_t; namespace Game { using signal_t = volatile std::sig_atomic_t; @@ -43,7 +29,7 @@ public: Logger* logger, const std::string masterIP, int masterPort, - ServerType serverType, + ServiceType serverType, dConfig* config, Game::signal_t* shouldShutdown, const std::string& masterPassword, @@ -80,7 +66,7 @@ public: NetworkIDManager* GetNetworkIDManager() { return mNetIDManager; } - const ServerType GetServerType() const { return mServerType; } + ServiceType GetServerType() const { return mServerType; } [[nodiscard]] std::chrono::steady_clock::duration GetUptime() const { @@ -114,7 +100,7 @@ protected: bool mIsInternal; bool mIsOkay; bool mMasterConnectionActive; - ServerType mServerType; + ServiceType mServerType; RakPeerInterface* mMasterPeer = nullptr; SocketDescriptor mMasterSocketDescriptor; diff --git a/dWorldServer/WorldServer.cpp b/dWorldServer/WorldServer.cpp index 4380edd7..16b92339 100644 --- a/dWorldServer/WorldServer.cpp +++ b/dWorldServer/WorldServer.cpp @@ -64,7 +64,7 @@ #include "NiPoint3.h" #include "eServerDisconnectIdentifiers.h" #include "eObjectBits.h" -#include "eConnectionType.h" +#include "ServiceType.h" #include "MessageType/Server.h" #include "MessageType/Chat.h" #include "MessageType/World.h" @@ -235,7 +235,7 @@ int main(int argc, char** argv) { Game::logger, masterIP, masterPort, - ServerType::World, + ServiceType::WORLD, Game::config, &Game::lastSignal, masterPassword, @@ -554,7 +554,7 @@ void HandlePacketChat(Packet* packet) { } if (packet->data[0] == ID_USER_PACKET_ENUM && packet->length >= 4) { - if (static_cast(packet->data[1]) == eConnectionType::CHAT) { + if (static_cast(packet->data[1]) == ServiceType::CHAT) { switch (static_cast(packet->data[3])) { case MessageType::Chat::WORLD_ROUTE_PACKET: { CINSTREAM_SKIP_HEADER; @@ -672,7 +672,7 @@ void HandlePacketChat(Packet* packet) { void HandleMasterPacket(Packet* packet) { if (packet->length < 2) return; - if (static_cast(packet->data[1]) != eConnectionType::MASTER || packet->length < 4) return; + if (static_cast(packet->data[1]) != ServiceType::MASTER || packet->length < 4) return; switch (static_cast(packet->data[3])) { case MessageType::Master::REQUEST_PERSISTENT_ID_RESPONSE: { CINSTREAM_SKIP_HEADER; @@ -739,7 +739,7 @@ void HandleMasterPacket(Packet* packet) { //Notify master: { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::PLAYER_ADDED); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::PLAYER_ADDED); bitStream.Write(Game::server->GetZoneID()); bitStream.Write(g_InstanceID); Game::server->SendToMaster(bitStream); @@ -756,7 +756,7 @@ void HandleMasterPacket(Packet* packet) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::AFFIRM_TRANSFER_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::AFFIRM_TRANSFER_RESPONSE); bitStream.Write(requestID); Game::server->SendToMaster(bitStream); @@ -830,7 +830,7 @@ void HandlePacket(Packet* packet) { { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); bitStream.Write(user->GetLoggedInChar()); Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false); } @@ -842,7 +842,7 @@ void HandlePacket(Packet* packet) { } CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::PLAYER_REMOVED); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::PLAYER_REMOVED); bitStream.Write(Game::server->GetZoneID()); bitStream.Write(g_InstanceID); Game::server->SendToMaster(bitStream); @@ -854,13 +854,13 @@ void HandlePacket(Packet* packet) { LUBitStream luBitStream; luBitStream.ReadHeader(inStream); - if (luBitStream.connectionType == eConnectionType::SERVER) { + if (luBitStream.connectionType == ServiceType::COMMON) { if (static_cast(luBitStream.internalPacketID) == MessageType::Server::VERSION_CONFIRM) { AuthPackets::HandleHandshake(Game::server, packet); } } - if (luBitStream.connectionType != eConnectionType::WORLD) return; + if (luBitStream.connectionType != ServiceType::WORLD) return; switch (static_cast(luBitStream.internalPacketID)) { case MessageType::World::VALIDATION: { @@ -911,7 +911,7 @@ void HandlePacket(Packet* packet) { //Request the session info from Master: CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::REQUEST_SESSION_KEY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::REQUEST_SESSION_KEY); bitStream.Write(username); Game::server->SendToMaster(bitStream); @@ -1004,7 +1004,7 @@ void HandlePacket(Packet* packet) { // This means we swapped characters and we need to remove the previous player from the container. if (static_cast(lastCharacter) != playerID) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT); bitStream.Write(lastCharacter); Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false); } @@ -1157,7 +1157,7 @@ void HandlePacket(Packet* packet) { // Workaround for not having a UGC server to get model LXFML onto the client so it // can generate the physics and nif for the object. CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CLIENT, MessageType::Client::BLUEPRINT_SAVE_RESPONSE); bitStream.Write(LWOOBJID_EMPTY); //always zero so that a check on the client passes bitStream.Write(eBlueprintSaveResponseType::EverythingWorked); bitStream.Write(1); @@ -1189,7 +1189,7 @@ void HandlePacket(Packet* packet) { const auto& playerName = character->GetName(); CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::LOGIN_SESSION_NOTIFY); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::LOGIN_SESSION_NOTIFY); bitStream.Write(player->GetObjectID()); bitStream.Write(playerName.size()); for (size_t i = 0; i < playerName.size(); i++) { @@ -1247,7 +1247,7 @@ void HandlePacket(Packet* packet) { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, packet->data[14]); + BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, packet->data[14]); //We need to insert the player's objectID so the chat server can find who originated this request: LWOOBJID objectID = 0; @@ -1513,6 +1513,6 @@ void FinalizeShutdown() { void SendShutdownMessageToMaster() { CBITSTREAM; - BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, MessageType::Master::SHUTDOWN_RESPONSE); + BitStreamUtils::WriteHeader(bitStream, ServiceType::MASTER, MessageType::Master::SHUTDOWN_RESPONSE); Game::server->SendToMaster(bitStream); } diff --git a/tests/dGameTests/dGameMessagesTests/GameMessageTests.cpp b/tests/dGameTests/dGameMessagesTests/GameMessageTests.cpp index 5108cdec..68cd877b 100644 --- a/tests/dGameTests/dGameMessagesTests/GameMessageTests.cpp +++ b/tests/dGameTests/dGameMessagesTests/GameMessageTests.cpp @@ -57,16 +57,17 @@ TEST_F(GameMessageTests, SendBlueprintLoadItemResponse) { ASSERT_EQ(bitStream->GetNumberOfUnreadBits(), 200); // First read in the packets' header uint8_t rakNetPacketId{}; - uint16_t remoteConnectionType{}; + uint8_t remoteServiceType{}; uint32_t packetId{}; uint8_t always0{}; bitStream->Read(rakNetPacketId); - bitStream->Read(remoteConnectionType); + bitStream->Read(remoteServiceType); + bitStream->IgnoreBytes(1); bitStream->Read(packetId); bitStream->Read(always0); ASSERT_EQ(rakNetPacketId, 0x53); - ASSERT_EQ(remoteConnectionType, 0x05); + ASSERT_EQ(remoteServiceType, 0x5); ASSERT_EQ(packetId, 0x17); ASSERT_EQ(always0, 0x00);