summaryrefslogtreecommitdiff
path: root/src/network/network.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/network.cpp')
-rw-r--r--src/network/network.cpp52
1 files changed, 43 insertions, 9 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp
index daf2e1d3f..4fdbdab73 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -619,35 +619,69 @@ static void NetworkInitialize(bool close_admins = true)
_network_reconnect = 0;
}
-/** Non blocking connection create to query servers */
+/** Non blocking connection to query servers for their game info. */
class TCPQueryConnecter : TCPConnecter {
private:
- bool request_company_info;
std::string connection_string;
public:
- TCPQueryConnecter(const std::string &connection_string, bool request_company_info) : TCPConnecter(connection_string, NETWORK_DEFAULT_PORT), request_company_info(request_company_info), connection_string(connection_string) {}
+ TCPQueryConnecter(const std::string &connection_string) : TCPConnecter(connection_string, NETWORK_DEFAULT_PORT), connection_string(connection_string) {}
void OnConnect(SOCKET s) override
{
_networking = true;
new ClientNetworkGameSocketHandler(s, this->connection_string);
- MyClient::SendInformationQuery(request_company_info);
+ MyClient::SendInformationQuery(false);
}
};
/**
- * Query a server to fetch his game-info.
+ * Query a server to fetch the game-info.
* @param connection_string the address to query.
- * @param request_company_info Whether to request company info too.
*/
-void NetworkTCPQueryServer(const std::string &connection_string, bool request_company_info)
+void NetworkQueryServer(const std::string &connection_string)
{
if (!_network_available) return;
NetworkInitialize();
- new TCPQueryConnecter(connection_string, request_company_info);
+ new TCPQueryConnecter(connection_string);
+}
+
+/** Non blocking connection to query servers for their game and company info. */
+class TCPLobbyQueryConnecter : TCPConnecter {
+private:
+ std::string connection_string;
+
+public:
+ TCPLobbyQueryConnecter(const std::string &connection_string) : TCPConnecter(connection_string, NETWORK_DEFAULT_PORT), connection_string(connection_string) {}
+
+ void OnFailure() override
+ {
+ DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY);
+
+ ShowErrorMessage(STR_NETWORK_ERROR_NOCONNECTION, INVALID_STRING_ID, WL_ERROR);
+ }
+
+ void OnConnect(SOCKET s) override
+ {
+ _networking = true;
+ new ClientNetworkGameSocketHandler(s, this->connection_string);
+ MyClient::SendInformationQuery(true);
+ }
+};
+
+/**
+ * Query a server to fetch his game-info for the lobby.
+ * @param connection_string the address to query.
+ */
+void NetworkQueryLobbyServer(const std::string &connection_string)
+{
+ if (!_network_available) return;
+
+ NetworkInitialize();
+
+ new TCPLobbyQueryConnecter(connection_string);
}
/**
@@ -670,7 +704,7 @@ NetworkGameList *NetworkAddServer(const std::string &connection_string, bool man
NetworkRebuildHostList();
UpdateNetworkGameWindow();
- NetworkTCPQueryServer(connection_string);
+ NetworkQueryServer(connection_string);
}
if (manually) item->manually = true;