Breakout ServerDisconnectIdentifiers into an enum (#995)

This commit is contained in:
Aaron Kimbrell 2023-02-19 06:29:14 -06:00 committed by GitHub
parent d138b7b878
commit 6d989f37f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 40 additions and 25 deletions

View File

@ -261,20 +261,6 @@ enum eReplicaPacketType {
PACKET_TYPE_DESTRUCTION //!< A destruction packet PACKET_TYPE_DESTRUCTION //!< A destruction packet
}; };
enum ServerDisconnectIdentifiers {
SERVER_DISCON_UNKNOWN_SERVER_ERROR = 0, //!< Unknown server error
SERVER_DISCON_DUPLICATE_LOGIN = 4, //!< Used when another user with the same username is logged in (duplicate login)
SERVER_DISCON_SERVER_SHUTDOWN = 5, //!< Used when the server is shutdown
SERVER_DISCON_SERVER_MAP_LOAD_FAILURE = 6, //!< Used when the server cannot load a map
SERVER_DISCON_INVALID_SESSION_KEY = 7, //!< Used if the session is invalid
SERVER_DISCON_ACCOUNT_NOT_IN_PENDING_LIST = 8, //!< ???
SERVER_DISCON_CHARACTER_NOT_FOUND = 9, //!< Used if a character that the server has is not found (i.e, corruption with user-player data)
SERVER_DISCON_CHARACTER_CORRUPTED = 10, //!< Similar to abovce
SERVER_DISCON_KICK = 11, //!< Used if the user is kicked from the server
SERVER_DISCON_FREE_TRIAL_EXPIRED = 12, //!< Used if the user's free trial expired
SERVER_DISCON_PLAY_SCHEDULE_TIME_DONE = 13 //!< Used if the user's play time is used up
};
//! The Behavior Types for use with the AI system //! The Behavior Types for use with the AI system
enum eCombatBehaviorTypes : uint32_t { enum eCombatBehaviorTypes : uint32_t {
PASSIVE = 0, //!< The object is passive PASSIVE = 0, //!< The object is passive

View File

@ -0,0 +1,24 @@
#ifndef __ESERVERDISCONNECTIDENTIFIERS__H__
#define __ESERVERDISCONNECTIDENTIFIERS__H__
#include <cstdint>
enum class eServerDisconnectIdentifiers : uint32_t {
UNKNOWN_SERVER_ERROR = 0,
WRONG_GAME_VERSION,
WRONG_SERVER_VERSION,
CONNECTION_ON_INVALID_PORT,
DUPLICATE_LOGIN,
SERVER_SHUTDOWN,
SERVER_MAP_LOAD_FAILURE,
INVALID_SESSION_KEY,
ACCOUNT_NOT_IN_PENDING_LIST,
CHARACTER_NOT_FOUND,
CHARACTER_CORRUPTED,
KICK,
SAVE_FAILURE,
FREE_TRIAL_EXPIRED,
PLAY_SCHEDULE_TIME_DONE
};
#endif //!__ESERVERDISCONNECTIDENTIFIERS__H__

View File

@ -5,6 +5,7 @@
#include "dLogger.h" #include "dLogger.h"
#include "Game.h" #include "Game.h"
#include "dZoneManager.h" #include "dZoneManager.h"
#include "eServerDisconnectIdentifiers.h"
User::User(const SystemAddress& sysAddr, const std::string& username, const std::string& sessionKey) { User::User(const SystemAddress& sysAddr, const std::string& username, const std::string& sessionKey) {
m_AccountID = 0; m_AccountID = 0;
@ -126,6 +127,6 @@ void User::UserOutOfSync() {
if (m_AmountOfTimesOutOfSync > m_MaxDesyncAllowed) { if (m_AmountOfTimesOutOfSync > m_MaxDesyncAllowed) {
//YEET //YEET
Game::logger->Log("User", "User %s was out of sync %i times out of %i, disconnecting for suspected speedhacking.", m_Username.c_str(), m_AmountOfTimesOutOfSync, m_MaxDesyncAllowed); Game::logger->Log("User", "User %s was out of sync %i times out of %i, disconnecting for suspected speedhacking.", m_Username.c_str(), m_AmountOfTimesOutOfSync, m_MaxDesyncAllowed);
Game::server->Disconnect(this->m_SystemAddress, SERVER_DISCON_KICK); Game::server->Disconnect(this->m_SystemAddress, eServerDisconnectIdentifiers::PLAY_SCHEDULE_TIME_DONE);
} }
} }

View File

@ -74,6 +74,7 @@
#include "dMessageIdentifiers.h" #include "dMessageIdentifiers.h"
#include "eMissionState.h" #include "eMissionState.h"
#include "TriggerComponent.h" #include "TriggerComponent.h"
#include "eServerDisconnectIdentifiers.h"
void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entity* entity, const SystemAddress& sysAddr) { void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entity* entity, const SystemAddress& sysAddr) {
std::string chatCommand; std::string chatCommand;
@ -1094,7 +1095,7 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
return; return;
} }
Game::server->Disconnect(player->GetSystemAddress(), SERVER_DISCON_KICK); Game::server->Disconnect(player->GetSystemAddress(), eServerDisconnectIdentifiers::KICK);
ChatPackets::SendSystemMessage(sysAddr, u"Kicked: " + username); ChatPackets::SendSystemMessage(sysAddr, u"Kicked: " + username);
} else { } else {
@ -1140,7 +1141,7 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
delete userUpdate; delete userUpdate;
if (player != nullptr) { if (player != nullptr) {
Game::server->Disconnect(player->GetSystemAddress(), SERVER_DISCON_KICK); Game::server->Disconnect(player->GetSystemAddress(), eServerDisconnectIdentifiers::FREE_TRIAL_EXPIRED);
} }
ChatPackets::SendSystemMessage(sysAddr, u"Banned: " + GeneralUtils::ASCIIToUTF16(args[0])); ChatPackets::SendSystemMessage(sysAddr, u"Banned: " + GeneralUtils::ASCIIToUTF16(args[0]));

View File

@ -21,6 +21,7 @@
#include "Game.h" #include "Game.h"
#include "dConfig.h" #include "dConfig.h"
#include "eServerDisconnectIdentifiers.h"
void AuthPackets::HandleHandshake(dServer* server, Packet* packet) { void AuthPackets::HandleHandshake(dServer* server, Packet* packet) {
RakNet::BitStream inStream(packet->data, packet->length, false); RakNet::BitStream inStream(packet->data, packet->length, false);

View File

@ -164,7 +164,7 @@ void dServer::SendToMaster(RakNet::BitStream* bitStream) {
mMasterPeer->Send(bitStream, SYSTEM_PRIORITY, RELIABLE_ORDERED, 0, mMasterSystemAddress, false); mMasterPeer->Send(bitStream, SYSTEM_PRIORITY, RELIABLE_ORDERED, 0, mMasterSystemAddress, false);
} }
void dServer::Disconnect(const SystemAddress& sysAddr, uint32_t disconNotifyID) { void dServer::Disconnect(const SystemAddress& sysAddr, eServerDisconnectIdentifiers disconNotifyID) {
RakNet::BitStream bitStream; RakNet::BitStream bitStream;
PacketUtils::WriteHeader(bitStream, SERVER, MSG_SERVER_DISCONNECT_NOTIFY); PacketUtils::WriteHeader(bitStream, SERVER, MSG_SERVER_DISCONNECT_NOTIFY);
bitStream.Write(disconNotifyID); bitStream.Write(disconNotifyID);

View File

@ -6,6 +6,7 @@
class dLogger; class dLogger;
class dConfig; class dConfig;
enum class eServerDisconnectIdentifiers : uint32_t;
enum class ServerType : uint32_t { enum class ServerType : uint32_t {
Master, Master,
@ -41,7 +42,7 @@ public:
virtual void Send(RakNet::BitStream* bitStream, const SystemAddress& sysAddr, bool broadcast); virtual void Send(RakNet::BitStream* bitStream, const SystemAddress& sysAddr, bool broadcast);
void SendToMaster(RakNet::BitStream* bitStream); void SendToMaster(RakNet::BitStream* bitStream);
void Disconnect(const SystemAddress& sysAddr, uint32_t disconNotifyID); void Disconnect(const SystemAddress& sysAddr, eServerDisconnectIdentifiers disconNotifyID);
bool IsConnected(const SystemAddress& sysAddr); bool IsConnected(const SystemAddress& sysAddr);
const std::string& GetIP() const { return mIP; } const std::string& GetIP() const { return mIP; }

View File

@ -63,6 +63,7 @@
#include "eBlueprintSaveResponseType.h" #include "eBlueprintSaveResponseType.h"
#include "AMFFormat.h" #include "AMFFormat.h"
#include "NiPoint3.h" #include "NiPoint3.h"
#include "eServerDisconnectIdentifiers.h"
#include "ZCompression.h" #include "ZCompression.h"
@ -765,7 +766,7 @@ void HandlePacket(Packet* packet) {
//Verify it: //Verify it:
if (userHash != it->second.hash) { if (userHash != it->second.hash) {
Game::logger->Log("WorldServer", "SOMEONE IS TRYING TO HACK? SESSION KEY MISMATCH: ours: %s != master: %s", userHash.c_str(), it->second.hash.c_str()); Game::logger->Log("WorldServer", "SOMEONE IS TRYING TO HACK? SESSION KEY MISMATCH: ours: %s != master: %s", userHash.c_str(), it->second.hash.c_str());
Game::server->Disconnect(it->second.sysAddr, SERVER_DISCON_INVALID_SESSION_KEY); Game::server->Disconnect(it->second.sysAddr, eServerDisconnectIdentifiers::INVALID_SESSION_KEY);
return; return;
} else { } else {
Game::logger->Log("WorldServer", "User %s authenticated with correct key.", username.c_str()); Game::logger->Log("WorldServer", "User %s authenticated with correct key.", username.c_str());
@ -855,7 +856,7 @@ void HandlePacket(Packet* packet) {
//Check the key: //Check the key:
if (sessionKey != std::atoi(user->GetSessionKey().c_str())) { if (sessionKey != std::atoi(user->GetSessionKey().c_str())) {
Game::logger->Log("WorldServer", "Got new session alert for user %s, but the session key is invalid.", username.c_str()); Game::logger->Log("WorldServer", "Got new session alert for user %s, but the session key is invalid.", username.c_str());
Game::server->Disconnect(user->GetSystemAddress(), SERVER_DISCON_INVALID_SESSION_KEY); Game::server->Disconnect(user->GetSystemAddress(), eServerDisconnectIdentifiers::INVALID_SESSION_KEY);
return; return;
} }
break; break;
@ -896,7 +897,7 @@ void HandlePacket(Packet* packet) {
// Developers may skip this check // Developers may skip this check
if (gmLevel < 8 && clientDatabaseChecksum != databaseChecksum) { if (gmLevel < 8 && clientDatabaseChecksum != databaseChecksum) {
Game::logger->Log("WorldServer", "Client's database checksum does not match the server's, aborting connection."); Game::logger->Log("WorldServer", "Client's database checksum does not match the server's, aborting connection.");
Game::server->Disconnect(packet->systemAddress, SERVER_DISCON_KICK); Game::server->Disconnect(packet->systemAddress, eServerDisconnectIdentifiers::WRONG_GAME_VERSION);
return; return;
} }
} }
@ -1184,7 +1185,7 @@ void HandlePacket(Packet* packet) {
} }
} else { } else {
Game::logger->Log("WorldServer", "Couldn't find character to log in with for user %s (%i)!", user->GetUsername().c_str(), user->GetAccountID()); Game::logger->Log("WorldServer", "Couldn't find character to log in with for user %s (%i)!", user->GetUsername().c_str(), user->GetAccountID());
Game::server->Disconnect(packet->systemAddress, SERVER_DISCON_CHARACTER_NOT_FOUND); Game::server->Disconnect(packet->systemAddress, eServerDisconnectIdentifiers::CHARACTER_NOT_FOUND);
} }
} else { } else {
Game::logger->Log("WorldServer", "Couldn't get user for level load complete!"); Game::logger->Log("WorldServer", "Couldn't get user for level load complete!");
@ -1269,7 +1270,7 @@ void HandlePacket(Packet* packet) {
if (user) { if (user) {
user->UserOutOfSync(); user->UserOutOfSync();
} else { } else {
Game::server->Disconnect(packet->systemAddress, SERVER_DISCON_KICK); Game::server->Disconnect(packet->systemAddress, eServerDisconnectIdentifiers::KICK);
} }
break; break;
} }
@ -1309,7 +1310,7 @@ void WorldShutdownProcess(uint32_t zoneId) {
while (Game::server->GetReplicaManager()->GetParticipantCount() > 0) { while (Game::server->GetReplicaManager()->GetParticipantCount() > 0) {
const auto& player = Game::server->GetReplicaManager()->GetParticipantAtIndex(0); const auto& player = Game::server->GetReplicaManager()->GetParticipantAtIndex(0);
Game::server->Disconnect(player, SERVER_DISCON_KICK); Game::server->Disconnect(player, eServerDisconnectIdentifiers::SERVER_SHUTDOWN);
} }
SendShutdownMessageToMaster(); SendShutdownMessageToMaster();
} }