summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/serverinfo.h38
-rw-r--r--src/net/tmwa/charserverhandler.cpp9
-rw-r--r--src/net/tmwa/loginhandler.cpp12
-rw-r--r--src/net/tmwa/network.cpp2
-rw-r--r--src/net/tmwa/network.h2
5 files changed, 27 insertions, 36 deletions
diff --git a/src/net/serverinfo.h b/src/net/serverinfo.h
index 8e2ee5b0..98881931 100644
--- a/src/net/serverinfo.h
+++ b/src/net/serverinfo.h
@@ -38,35 +38,16 @@ public:
typedef std::pair<int, std::string> VersionString;
- Type type;
+ Type type = UNKNOWN;
std::string name;
std::string hostname;
- unsigned short port;
+ unsigned short port = 0;
std::string description;
- VersionString version;
+ VersionString version = std::make_pair(0, std::string());
- bool save;
-
- ServerInfo()
- {
- type = UNKNOWN;
- port = 0;
- save = false;
- version.first = 0;
- }
-
- ServerInfo(const ServerInfo &info)
- {
- type = info.type;
- name = info.name;
- hostname = info.hostname;
- port = info.port;
- description = info.description;
- version.first = info.version.first;
- version.second = info.version.second;
- save = info.save;
- }
+ bool save = false;
+ bool persistentIp = true;
bool isValid() const
{
@@ -75,14 +56,7 @@ public:
void clear()
{
- type = UNKNOWN;
- name.clear();
- hostname.clear();
- port = 0;
- description.clear();
- version.first = 0;
- version.second.clear();
- save = false;
+ *this = ServerInfo();
}
bool operator==(const ServerInfo &other) const
diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp
index 7c5f5c88..a8e87622 100644
--- a/src/net/tmwa/charserverhandler.cpp
+++ b/src/net/tmwa/charserverhandler.cpp
@@ -158,7 +158,14 @@ void CharServerHandler::handleMessage(MessageIn &msg)
msg.skip(4); // CharID, must be the same as local_player->charID
GameHandler *gh = static_cast<GameHandler*>(Net::getGameHandler());
gh->setMap(msg.readString(16));
- mapServer.hostname = ipToString(msg.readInt32());
+
+ const auto ip = msg.readInt32();
+
+ if (charServer.persistentIp)
+ mapServer.hostname = charServer.hostname;
+ else
+ mapServer.hostname = ipToString(ip);
+
mapServer.port = msg.readInt16();
local_player = mSelectedCharacter->dummy;
diff --git a/src/net/tmwa/loginhandler.cpp b/src/net/tmwa/loginhandler.cpp
index 77b545fd..2fbc02d4 100644
--- a/src/net/tmwa/loginhandler.cpp
+++ b/src/net/tmwa/loginhandler.cpp
@@ -274,7 +274,17 @@ void LoginHandler::chooseServer(unsigned int server)
return;
charServer.clear();
- charServer.hostname = ipToString(mWorlds[server]->address);
+
+ if (mServer.persistentIp)
+ {
+ charServer.hostname = mServer.hostname;
+ charServer.persistentIp = mServer.persistentIp;
+ }
+ else
+ {
+ charServer.hostname = ipToString(mWorlds[server]->address);
+ }
+
charServer.port = mWorlds[server]->port;
Client::setState(STATE_UPDATE);
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index ed564b46..5ff4f7e5 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -132,7 +132,7 @@ Network::~Network()
SDLNet_Quit();
}
-bool Network::connect(ServerInfo server)
+bool Network::connect(const ServerInfo &server)
{
if (mState != IDLE && mState != NET_ERROR)
{
diff --git a/src/net/tmwa/network.h b/src/net/tmwa/network.h
index 08943327..079e71ca 100644
--- a/src/net/tmwa/network.h
+++ b/src/net/tmwa/network.h
@@ -51,7 +51,7 @@ class Network
~Network();
- bool connect(ServerInfo server);
+ bool connect(const ServerInfo &server);
void disconnect();