summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/generalhandler.h2
-rw-r--r--src/net/manaserv/adminhandler.cpp6
-rw-r--r--src/net/manaserv/connection.cpp5
-rw-r--r--src/net/manaserv/generalhandler.cpp29
-rw-r--r--src/net/manaserv/generalhandler.h2
-rw-r--r--src/net/messagehandler.h5
-rw-r--r--src/net/net.cpp17
-rw-r--r--src/net/tmwa/generalhandler.cpp9
-rw-r--r--src/net/tmwa/generalhandler.h2
-rw-r--r--src/net/tmwa/guildhandler.cpp5
10 files changed, 31 insertions, 51 deletions
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;
}