diff options
-rw-r--r-- | src/client.cpp | 5 | ||||
-rw-r--r-- | src/net/generalhandler.h | 2 | ||||
-rw-r--r-- | src/net/manaserv/adminhandler.cpp | 6 | ||||
-rw-r--r-- | src/net/manaserv/connection.cpp | 5 | ||||
-rw-r--r-- | src/net/manaserv/generalhandler.cpp | 29 | ||||
-rw-r--r-- | src/net/manaserv/generalhandler.h | 2 | ||||
-rw-r--r-- | src/net/messagehandler.h | 5 | ||||
-rw-r--r-- | src/net/net.cpp | 17 | ||||
-rw-r--r-- | src/net/tmwa/generalhandler.cpp | 9 | ||||
-rw-r--r-- | src/net/tmwa/generalhandler.h | 2 | ||||
-rw-r--r-- | src/net/tmwa/guildhandler.cpp | 5 |
11 files changed, 33 insertions, 54 deletions
diff --git a/src/client.cpp b/src/client.cpp index e5178048..2743a8b2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -908,13 +908,10 @@ int Client::exec() case STATE_EXIT: logger->log("State: EXIT"); - Net::unload(); break; case STATE_FORCE_QUIT: logger->log("State: FORCE QUIT"); - if (Net::getGeneralHandler()) - Net::getGeneralHandler()->unload(); mState = STATE_EXIT; break; @@ -932,6 +929,8 @@ int Client::exec() } } + Net::unload(); + return 0; } diff --git a/src/net/generalhandler.h b/src/net/generalhandler.h index 21653265..93d76421 100644 --- a/src/net/generalhandler.h +++ b/src/net/generalhandler.h @@ -35,8 +35,6 @@ class GeneralHandler virtual void unload() = 0; virtual void flushNetwork() = 0; - - virtual void clearHandlers() = 0; }; } // namespace Net diff --git a/src/net/manaserv/adminhandler.cpp b/src/net/manaserv/adminhandler.cpp index 78e6acb2..ef155a38 100644 --- a/src/net/manaserv/adminhandler.cpp +++ b/src/net/manaserv/adminhandler.cpp @@ -31,17 +31,11 @@ extern Connection *chatServerConnection; AdminHandler::AdminHandler() { - static const uint16_t _messages[] = - { - 0 - }; - handledMessages = _messages; adminHandler = this; } void AdminHandler::handleMessage(MessageIn &msg) { - } void AdminHandler::kick(const std::string &name) diff --git a/src/net/manaserv/connection.cpp b/src/net/manaserv/connection.cpp index 896d86ad..1b6f757a 100644 --- a/src/net/manaserv/connection.cpp +++ b/src/net/manaserv/connection.cpp @@ -45,6 +45,8 @@ Connection::~Connection() bool Connection::connect(const std::string &address, enet_uint16 port) { logger->log("Net::Connection::connect(%s, %i)", address.c_str(), port); + if (mConnection) + disconnect(); if (address.empty()) { @@ -87,8 +89,7 @@ void Connection::disconnect() bool Connection::isConnected() { - return (mConnection) ? - (mConnection->state == ENET_PEER_STATE_CONNECTED) : false; + return mConnection && mConnection->state == ENET_PEER_STATE_CONNECTED; } void Connection::send(const ManaServ::MessageOut &msg) diff --git a/src/net/manaserv/generalhandler.cpp b/src/net/manaserv/generalhandler.cpp index b947cff4..7f5f5081 100644 --- a/src/net/manaserv/generalhandler.cpp +++ b/src/net/manaserv/generalhandler.cpp @@ -47,8 +47,6 @@ #include "resources/attributes.h" -extern Net::GeneralHandler *generalHandler; - extern ManaServ::LoginHandler *loginHandler; namespace ManaServ { @@ -84,8 +82,6 @@ GeneralHandler::GeneralHandler(): gameServerConnection = getConnection(); chatServerConnection = getConnection(); - generalHandler = this; - listen(Event::ClientChannel); listen(Event::GameChannel); } @@ -129,18 +125,28 @@ void GeneralHandler::reload() void GeneralHandler::unload() { - clearHandlers(); + clearNetworkHandlers(); if (accountServerConnection) + { accountServerConnection->disconnect(); + delete accountServerConnection; + accountServerConnection = nullptr; + } + if (gameServerConnection) + { gameServerConnection->disconnect(); + delete gameServerConnection; + gameServerConnection = nullptr; + } + if (chatServerConnection) + { chatServerConnection->disconnect(); - - delete accountServerConnection; - delete gameServerConnection; - delete chatServerConnection; + delete chatServerConnection; + chatServerConnection = nullptr; + } finalize(); } @@ -157,11 +163,6 @@ void GeneralHandler::flushNetwork() } } -void GeneralHandler::clearHandlers() -{ - clearNetworkHandlers(); -} - void GeneralHandler::event(Event::Channel channel, const Event &event) { diff --git a/src/net/manaserv/generalhandler.h b/src/net/manaserv/generalhandler.h index 865bbd0d..de0e3138 100644 --- a/src/net/manaserv/generalhandler.h +++ b/src/net/manaserv/generalhandler.h @@ -43,8 +43,6 @@ class GeneralHandler : public Net::GeneralHandler, public EventListener void flushNetwork() override; - void clearHandlers() override; - void event(Event::Channel channel, const Event &event) override; protected: diff --git a/src/net/messagehandler.h b/src/net/messagehandler.h index adf61090..21973fa9 100644 --- a/src/net/messagehandler.h +++ b/src/net/messagehandler.h @@ -31,9 +31,12 @@ namespace Net { class MessageHandler { public: - const uint16_t *handledMessages; + const uint16_t *handledMessages = _no_messages; virtual ~MessageHandler() {} + + private: + static constexpr uint16_t _no_messages[] = { 0 }; }; } // namespace Net diff --git a/src/net/net.cpp b/src/net/net.cpp index 93003280..dc86bc89 100644 --- a/src/net/net.cpp +++ b/src/net/net.cpp @@ -124,7 +124,8 @@ Net::TradeHandler *Net::getTradeHandler() namespace Net { -ServerType networkType = ServerType::UNKNOWN; + +static ServerType networkType = ServerType::UNKNOWN; void connectToServer(ServerInfo &server) { @@ -146,20 +147,17 @@ void connectToServer(ServerInfo &server) } else { - if (networkType != ServerType::UNKNOWN && getGeneralHandler() != nullptr) - { - getGeneralHandler()->unload(); - } + unload(); switch (server.type) { #ifdef MANASERV_SUPPORT case ServerType::MANASERV: - new ManaServ::GeneralHandler; + generalHandler = new ManaServ::GeneralHandler; break; #endif case ServerType::TMWATHENA: - new TmwAthena::GeneralHandler; + generalHandler = new TmwAthena::GeneralHandler; break; default: logger->error(_("Server protocol unsupported")); @@ -178,9 +176,10 @@ void connectToServer(ServerInfo &server) void unload() { - if (GeneralHandler *handler = getGeneralHandler()) + if (generalHandler) { - handler->unload(); + generalHandler->unload(); + delete generalHandler; } } diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp index 2a8afb4e..2cf7d30f 100644 --- a/src/net/tmwa/generalhandler.cpp +++ b/src/net/tmwa/generalhandler.cpp @@ -60,8 +60,6 @@ #include <list> -extern Net::GeneralHandler *generalHandler; - namespace TmwAthena { ServerInfo charServer; @@ -92,7 +90,6 @@ GeneralHandler::GeneralHandler(): 0 }; handledMessages = _messages; - generalHandler = this; std::list<ItemStat> stats; stats.emplace_back("str", _("Strength %+d")); @@ -155,6 +152,7 @@ void GeneralHandler::handleMessage(MessageIn &msg) void GeneralHandler::load() { + // This sets mNetwork to the created Network instance (new Network)->registerHandler(this); mNetwork->registerHandler(mAdminHandler.get()); @@ -209,11 +207,6 @@ void GeneralHandler::flushNetwork() } } -void GeneralHandler::clearHandlers() -{ - mNetwork->clearHandlers(); -} - void GeneralHandler::event(Event::Channel channel, const Event &event) { diff --git a/src/net/tmwa/generalhandler.h b/src/net/tmwa/generalhandler.h index 529c1661..1da81ba8 100644 --- a/src/net/tmwa/generalhandler.h +++ b/src/net/tmwa/generalhandler.h @@ -48,8 +48,6 @@ class GeneralHandler final : public MessageHandler, public Net::GeneralHandler, void flushNetwork() override; - void clearHandlers() override; - void event(Event::Channel channel, const Event &event) override; protected: diff --git a/src/net/tmwa/guildhandler.cpp b/src/net/tmwa/guildhandler.cpp index 1877f0f1..e8ee4848 100644 --- a/src/net/tmwa/guildhandler.cpp +++ b/src/net/tmwa/guildhandler.cpp @@ -40,11 +40,6 @@ Guild *taGuild; GuildHandler::GuildHandler() { - static const Uint16 _messages[] = { - 0 - }; - handledMessages = _messages; - guildHandler = this; } |