From b1280fd17ebaf9e4df086b63074d0bd8b8c9155d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Jul 2021 11:04:32 +0200 Subject: Add: use Game Coordinator to annouce public servers --- src/network/network_coordinator.h | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/network/network_coordinator.h (limited to 'src/network/network_coordinator.h') diff --git a/src/network/network_coordinator.h b/src/network/network_coordinator.h new file mode 100644 index 000000000..1dbce063b --- /dev/null +++ b/src/network/network_coordinator.h @@ -0,0 +1,51 @@ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file network_coordinator.h Part of the network protocol handling Game Coordinator requests. */ + +#ifndef NETWORK_COORDINATOR_H +#define NETWORK_COORDINATOR_H + +#include "core/tcp_coordinator.h" + +/** + * Game Coordinator communication. + * + * For servers: + * - Server sends SERVER_REGISTER. + * - Game Coordinator probes server to check if it can directly connect. + * - Game Coordinator sends GC_REGISTER_ACK with type of connection. + * - Server sends every 30 seconds SERVER_UPDATE. + */ + +/** Class for handling the client side of the Game Coordinator connection. */ +class ClientNetworkCoordinatorSocketHandler : public NetworkCoordinatorSocketHandler { +private: + std::chrono::steady_clock::time_point next_update; ///< When to send the next update (if server and public). + +protected: + bool Receive_GC_ERROR(Packet *p) override; + bool Receive_GC_REGISTER_ACK(Packet *p) override; + +public: + bool connecting; ///< Are we connecting to the Game Coordinator? + + ClientNetworkCoordinatorSocketHandler() : connecting(false) {} + + NetworkRecvStatus CloseConnection(bool error = true) override; + void SendReceive(); + + void Connect(); + + void Register(); + void SendServerUpdate(); +}; + +extern ClientNetworkCoordinatorSocketHandler _network_coordinator_client; + +#endif /* NETWORK_COORDINATOR_H */ -- cgit v1.2.3-54-g00ecf