From 3fb51512e979228831a7037c2a104d7050bd8544 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 28 Jun 2015 17:43:24 -0400 Subject: [PATCH] Added RenX::DisconnectReason enum Added RenX_OnServerDisconnect event to RenX::Plugin Added DisconnectReason as a parameter for Server::disconnect() and Server::reconnect() -- adjusted all calls to these commands accordingly --- Release/Plugins/RenX.Core.lib | Bin 128666 -> 129390 bytes RenX.Commands/RenX_Commands.cpp | 2 +- RenX.Core/RenX.h | 16 ++++++++++++++++ RenX.Core/RenX_Plugin.cpp | 5 +++++ RenX.Core/RenX_Plugin.h | 1 + RenX.Core/RenX_Server.cpp | 18 +++++++++++------- RenX.Core/RenX_Server.h | 7 +++++-- 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 0e5fb8be085110fc2fdf981586db521ad89a46f5..e2bf5ba6e2ad677606b36ffd4d8c408a1e25a7b3 100644 GIT binary patch delta 14795 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 delta 14394 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 ZbpM!cQPiSmbi1;3V`6)jjq2Z@{tF)J95(;} diff --git a/RenX.Commands/RenX_Commands.cpp b/RenX.Commands/RenX_Commands.cpp index 8f8092c..620c1b8 100644 --- a/RenX.Commands/RenX_Commands.cpp +++ b/RenX.Commands/RenX_Commands.cpp @@ -1193,7 +1193,7 @@ void ReconnectIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString RenX::Server *server = RenX::getCore()->getServer(i); if (server->isLogChanType(type)) { - if (server->reconnect()) msg.set("Connection established"); + if (server->reconnect(RenX::DisconnectReason::Triggered)) msg.set("Connection established"); else msg.format("[RenX] ERROR: Failed to connect to %.*s on port %u." ENDL, server->getHostname().size(), server->getHostname().ptr(), server->getPort()); source->sendMessage(channel, msg); } diff --git a/RenX.Core/RenX.h b/RenX.Core/RenX.h index 43d223f..cadc2dc 100644 --- a/RenX.Core/RenX.h +++ b/RenX.Core/RenX.h @@ -65,6 +65,22 @@ namespace RenX Defence, None }; + + enum class DisconnectReason : unsigned int + { + SocketError, + SocketErrorReconnect, + PingTimeout, + PingTimeoutReconnect, + IncompatibleVersion, + IncompatibleVersionReconnect, + Triggered, + TriggeredReconnect, + Rehash, + RehashReconnect, + Other, + OtherReconnect + }; } #endif // __cplusplus diff --git a/RenX.Core/RenX_Plugin.cpp b/RenX.Core/RenX_Plugin.cpp index 0586b5a..86c57b2 100644 --- a/RenX.Core/RenX_Plugin.cpp +++ b/RenX.Core/RenX_Plugin.cpp @@ -65,6 +65,11 @@ void RenX::Plugin::RenX_OnServerCreate(Server *) return; } +void RenX::Plugin::RenX_OnServerDisconnect(Server *, RenX::DisconnectReason) +{ + return; +} + bool RenX::Plugin::RenX_OnBan(Server *, const RenX::PlayerInfo *, Jupiter::StringType &) { return false; diff --git a/RenX.Core/RenX_Plugin.h b/RenX.Core/RenX_Plugin.h index c4b0c18..cf2f369 100644 --- a/RenX.Core/RenX_Plugin.h +++ b/RenX.Core/RenX_Plugin.h @@ -48,6 +48,7 @@ namespace RenX virtual void RenX_OnPlayerDelete(Server *server, const PlayerInfo *player); virtual void RenX_OnPlayerUUIDChange(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &newUUID); virtual void RenX_OnServerCreate(Server *server); + virtual void RenX_OnServerDisconnect(Server *server, RenX::DisconnectReason reason); virtual bool RenX_OnBan(Server *server, const PlayerInfo *player, Jupiter::StringType &data); /** Player type logs */ diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index e03994a..0592083 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -50,7 +50,7 @@ int RenX::Server::think() else if (RenX::Server::awaitingPong && std::chrono::steady_clock::now() - RenX::Server::lastActivity >= RenX::Server::pingTimeoutThreshold) // ping timeout { RenX::Server::sendLogChan(STRING_LITERAL_AS_REFERENCE(IRCCOLOR "04[Error]" IRCCOLOR " Disconnected from Renegade-X server (ping timeout).")); - RenX::Server::disconnect(); + RenX::Server::disconnect(RenX::DisconnectReason::PingTimeout); } else { @@ -88,7 +88,7 @@ int RenX::Server::think() if (RenX::Server::maxAttempts != 0) { RenX::Server::sendLogChan(IRCCOLOR "07[Warning]" IRCCOLOR " Connection to Renegade-X server lost. Reconnection attempt in progress."); - if (RenX::Server::reconnect()) + if (RenX::Server::reconnect(RenX::DisconnectReason::SocketError)) RenX::Server::sendLogChan(IRCCOLOR "06[Progress]" IRCCOLOR " Connection to Renegade-X server reestablished. Initializing Renegade-X RCON protocol..."); else RenX::Server::sendLogChan(IRCCOLOR "04[Error]" IRCCOLOR " Connection to Renegade-X server lost. Reconnection attempt failed."); @@ -123,7 +123,7 @@ int RenX::Server::OnRehash() RenX::Server::commands.emptyAndDelete(); RenX::Server::init(); if (oldHostname.equalsi(RenX::Server::hostname) == false || oldPort != RenX::Server::port || oldClientHostname.equalsi(RenX::Server::clientHostname) == false || oldPass.equalsi(RenX::Server::pass) == false) - RenX::Server::reconnect(); + RenX::Server::reconnect(RenX::DisconnectReason::Rehash); return 0; } @@ -2419,7 +2419,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else { RenX::Server::sendLogChan(STRING_LITERAL_AS_REFERENCE(IRCCOLOR "04[Error]" IRCCOLOR " Disconnected from Renegade-X server (incompatible RCON version).")); - this->disconnect(); + this->disconnect(RenX::DisconnectReason::IncompatibleVersion); } break; @@ -2443,8 +2443,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } } -void RenX::Server::disconnect() +void RenX::Server::disconnect(RenX::DisconnectReason reason) { + Jupiter::ArrayList xPlugins; + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnServerDisconnect(this, reason); + RenX::Server::sock.closeSocket(); RenX::Server::wipeData(); RenX::Server::connected = false; @@ -2467,9 +2471,9 @@ bool RenX::Server::connect() return false; } -bool RenX::Server::reconnect() +bool RenX::Server::reconnect(RenX::DisconnectReason reason) { - RenX::Server::disconnect(); + RenX::Server::disconnect(static_cast(static_cast(reason) | 0x01)); return RenX::Server::connect(); } diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index d56b640..1ff9ed1 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -742,8 +742,10 @@ namespace RenX /** * @brief Disconnects from a server's RCON interface. + * + * @param reason Reason for reconnecting. */ - void disconnect(); + void disconnect(RenX::DisconnectReason reason); /** * @brief Connects to the server's RCON interface. @@ -755,9 +757,10 @@ namespace RenX /** * @brief Reconnects to the server's RCON interface. * + * @param reason Reason for reconnecting. * @return True if the socket successfully connected, false otherwise. */ - bool reconnect(); + bool reconnect(RenX::DisconnectReason reason); /** * @brief Deletes all of the data about a server (such as players).