diff options
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/serverinfo.h | 38 | ||||
-rw-r--r-- | src/net/tmwa/charserverhandler.cpp | 9 | ||||
-rw-r--r-- | src/net/tmwa/loginhandler.cpp | 12 | ||||
-rw-r--r-- | src/net/tmwa/network.cpp | 2 | ||||
-rw-r--r-- | src/net/tmwa/network.h | 2 |
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(); |