mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-10 08:00:05 +00:00
Remove: old server announcement to Master Server
As we now use the Game Coordinator for announcements, there is no longer a need to use the Master Server for this.
This commit is contained in:
parent
aa93d76223
commit
61fdef8457
@ -61,7 +61,6 @@ bool _is_network_server; ///< Does this client wants to be a network-server?
|
|||||||
NetworkCompanyState *_network_company_states = nullptr; ///< Statistics about some companies.
|
NetworkCompanyState *_network_company_states = nullptr; ///< Statistics about some companies.
|
||||||
ClientID _network_own_client_id; ///< Our client identifier.
|
ClientID _network_own_client_id; ///< Our client identifier.
|
||||||
ClientID _redirect_console_to_client; ///< If not invalid, redirect the console output to a client.
|
ClientID _redirect_console_to_client; ///< If not invalid, redirect the console output to a client.
|
||||||
bool _network_need_advertise; ///< Whether we need to advertise.
|
|
||||||
uint8 _network_reconnect; ///< Reconnect timeout
|
uint8 _network_reconnect; ///< Reconnect timeout
|
||||||
StringList _network_bind_list; ///< The addresses to bind on.
|
StringList _network_bind_list; ///< The addresses to bind on.
|
||||||
StringList _network_host_list; ///< The servers we know.
|
StringList _network_host_list; ///< The servers we know.
|
||||||
@ -944,10 +943,6 @@ bool NetworkServerStart()
|
|||||||
/* if the server is dedicated ... add some other script */
|
/* if the server is dedicated ... add some other script */
|
||||||
if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0");
|
if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0");
|
||||||
|
|
||||||
/* Try to register us to the master server */
|
|
||||||
_network_need_advertise = true;
|
|
||||||
NetworkUDPAdvertise();
|
|
||||||
|
|
||||||
/* welcome possibly still connected admins - this can only happen on a dedicated server. */
|
/* welcome possibly still connected admins - this can only happen on a dedicated server. */
|
||||||
if (_network_dedicated) ServerNetworkAdminSocketHandler::WelcomeAll();
|
if (_network_dedicated) ServerNetworkAdminSocketHandler::WelcomeAll();
|
||||||
|
|
||||||
@ -996,8 +991,6 @@ void NetworkDisconnect(bool blocking, bool close_admins)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(blocking);
|
|
||||||
|
|
||||||
CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
||||||
|
|
||||||
NetworkClose(close_admins);
|
NetworkClose(close_admins);
|
||||||
@ -1269,7 +1262,6 @@ void NetworkStartUp()
|
|||||||
/* Network is available */
|
/* Network is available */
|
||||||
_network_available = NetworkCoreInitialize();
|
_network_available = NetworkCoreInitialize();
|
||||||
_network_dedicated = false;
|
_network_dedicated = false;
|
||||||
_network_need_advertise = true;
|
|
||||||
|
|
||||||
/* Generate an server id when there is none yet */
|
/* Generate an server id when there is none yet */
|
||||||
if (_settings_client.network.network_id.empty()) NetworkGenerateServerId();
|
if (_settings_client.network.network_id.empty()) NetworkGenerateServerId();
|
||||||
|
@ -28,7 +28,6 @@ extern NetworkCompanyState *_network_company_states;
|
|||||||
|
|
||||||
extern ClientID _network_own_client_id;
|
extern ClientID _network_own_client_id;
|
||||||
extern ClientID _redirect_console_to_client;
|
extern ClientID _redirect_console_to_client;
|
||||||
extern bool _network_need_advertise;
|
|
||||||
extern uint8 _network_reconnect;
|
extern uint8 _network_reconnect;
|
||||||
extern StringList _network_bind_list;
|
extern StringList _network_bind_list;
|
||||||
extern StringList _network_host_list;
|
extern StringList _network_host_list;
|
||||||
|
@ -1879,9 +1879,6 @@ void NetworkServer_Tick(bool send_frame)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if we need to advertise */
|
|
||||||
NetworkUDPAdvertise();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Yearly "callback". Called whenever the year changes. */
|
/** Yearly "callback". Called whenever the year changes. */
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file network_udp.cpp This file handles the UDP related communication.
|
* @file network_udp.cpp This file handles the UDP related communication.
|
||||||
*
|
*
|
||||||
* This is the GameServer <-> MasterServer and GameServer <-> GameClient
|
* This is the GameServer <-> GameClient
|
||||||
* communication before the game is being joined.
|
* communication before the game is being joined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -34,16 +34,8 @@
|
|||||||
|
|
||||||
#include "../safeguards.h"
|
#include "../safeguards.h"
|
||||||
|
|
||||||
/** Session key to register ourselves to the master server */
|
|
||||||
static uint64 _session_key = 0;
|
|
||||||
|
|
||||||
static const std::chrono::minutes ADVERTISE_NORMAL_INTERVAL(15); ///< interval between advertising.
|
|
||||||
static const std::chrono::seconds ADVERTISE_RETRY_INTERVAL(10); ///< re-advertise when no response after this amount of time.
|
|
||||||
static const uint32 ADVERTISE_RETRY_TIMES = 3; ///< give up re-advertising after this much failed retries
|
|
||||||
|
|
||||||
static bool _network_udp_server; ///< Is the UDP server started?
|
static bool _network_udp_server; ///< Is the UDP server started?
|
||||||
static uint16 _network_udp_broadcast; ///< Timeout for the UDP broadcasts.
|
static uint16 _network_udp_broadcast; ///< Timeout for the UDP broadcasts.
|
||||||
static uint8 _network_advertise_retries; ///< The number of advertisement retries we did.
|
|
||||||
|
|
||||||
/** Some information about a socket, which exists before the actual socket has been created to provide locking and the likes. */
|
/** Some information about a socket, which exists before the actual socket has been created to provide locking and the likes. */
|
||||||
struct UDPSocket {
|
struct UDPSocket {
|
||||||
@ -79,7 +71,6 @@ struct UDPSocket {
|
|||||||
|
|
||||||
static UDPSocket _udp_client("Client"); ///< udp client socket
|
static UDPSocket _udp_client("Client"); ///< udp client socket
|
||||||
static UDPSocket _udp_server("Server"); ///< udp server socket
|
static UDPSocket _udp_server("Server"); ///< udp server socket
|
||||||
static UDPSocket _udp_master("Master"); ///< udp master socket
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function doing the actual work for querying the server.
|
* Helper function doing the actual work for querying the server.
|
||||||
@ -114,37 +105,6 @@ void NetworkUDPQueryServer(const std::string &connection_string, bool manually)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///*** Communication with the masterserver ***/
|
|
||||||
|
|
||||||
/** Helper class for connecting to the master server. */
|
|
||||||
class MasterNetworkUDPSocketHandler : public NetworkUDPSocketHandler {
|
|
||||||
protected:
|
|
||||||
void Receive_MASTER_ACK_REGISTER(Packet *p, NetworkAddress *client_addr) override;
|
|
||||||
void Receive_MASTER_SESSION_KEY(Packet *p, NetworkAddress *client_addr) override;
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Create the socket.
|
|
||||||
* @param addresses The addresses to bind on.
|
|
||||||
*/
|
|
||||||
MasterNetworkUDPSocketHandler(NetworkAddressList *addresses) : NetworkUDPSocketHandler(addresses) {}
|
|
||||||
virtual ~MasterNetworkUDPSocketHandler() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
void MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER(Packet *p, NetworkAddress *client_addr)
|
|
||||||
{
|
|
||||||
_network_advertise_retries = 0;
|
|
||||||
Debug(net, 3, "Advertising on master server successful ({})", NetworkAddress::AddressFamilyAsString(client_addr->GetAddress()->ss_family));
|
|
||||||
|
|
||||||
/* We are advertised, but we don't want to! */
|
|
||||||
if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(Packet *p, NetworkAddress *client_addr)
|
|
||||||
{
|
|
||||||
_session_key = p->Recv_uint64();
|
|
||||||
Debug(net, 6, "Received new session key from master server ({})", NetworkAddress::AddressFamilyAsString(client_addr->GetAddress()->ss_family));
|
|
||||||
}
|
|
||||||
|
|
||||||
///*** Communication with clients (we are server) ***/
|
///*** Communication with clients (we are server) ***/
|
||||||
|
|
||||||
/** Helper class for handling all server side communication. */
|
/** Helper class for handling all server side communication. */
|
||||||
@ -477,113 +437,6 @@ void NetworkUDPSearchGame()
|
|||||||
_network_udp_broadcast = 300; // Stay searching for 300 ticks
|
_network_udp_broadcast = 300; // Stay searching for 300 ticks
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Thread entry point for de-advertising.
|
|
||||||
*/
|
|
||||||
static void NetworkUDPRemoveAdvertiseThread()
|
|
||||||
{
|
|
||||||
Debug(net, 3, "Removing advertise from master server");
|
|
||||||
|
|
||||||
/* Find somewhere to send */
|
|
||||||
NetworkAddress out_addr(NETWORK_MASTER_SERVER_HOST, NETWORK_MASTER_SERVER_PORT);
|
|
||||||
|
|
||||||
/* Send the packet */
|
|
||||||
Packet p(PACKET_UDP_SERVER_UNREGISTER);
|
|
||||||
/* Packet is: Version, server_port */
|
|
||||||
p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION);
|
|
||||||
p.Send_uint16(_settings_client.network.server_port);
|
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(_udp_master.mutex);
|
|
||||||
if (_udp_master.socket != nullptr) _udp_master.socket->SendPacket(&p, &out_addr, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove our advertise from the master-server.
|
|
||||||
* @param blocking whether to wait until the removal has finished.
|
|
||||||
*/
|
|
||||||
void NetworkUDPRemoveAdvertise(bool blocking)
|
|
||||||
{
|
|
||||||
/* Check if we are advertising */
|
|
||||||
if (!_networking || !_network_server || !_network_udp_server) return;
|
|
||||||
|
|
||||||
if (blocking || !StartNewThread(nullptr, "ottd:udp-advert", &NetworkUDPRemoveAdvertiseThread)) {
|
|
||||||
NetworkUDPRemoveAdvertiseThread();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thread entry point for advertising.
|
|
||||||
*/
|
|
||||||
static void NetworkUDPAdvertiseThread()
|
|
||||||
{
|
|
||||||
/* Find somewhere to send */
|
|
||||||
NetworkAddress out_addr(NETWORK_MASTER_SERVER_HOST, NETWORK_MASTER_SERVER_PORT);
|
|
||||||
|
|
||||||
Debug(net, 3, "Advertising to master server");
|
|
||||||
|
|
||||||
/* Add a bit more messaging when we cannot get a session key */
|
|
||||||
static byte session_key_retries = 0;
|
|
||||||
if (_session_key == 0 && session_key_retries++ == 2) {
|
|
||||||
Debug(net, 0, "Advertising to the master server is failing");
|
|
||||||
Debug(net, 0, " we are not receiving the session key from the server");
|
|
||||||
Debug(net, 0, " please allow udp packets from {} to you to be delivered", out_addr.GetAddressAsString(false));
|
|
||||||
Debug(net, 0, " please allow udp packets from you to {} to be delivered", out_addr.GetAddressAsString(false));
|
|
||||||
}
|
|
||||||
if (_session_key != 0 && _network_advertise_retries == 0) {
|
|
||||||
Debug(net, 0, "Advertising to the master server is failing");
|
|
||||||
Debug(net, 0, " we are not receiving the acknowledgement from the server");
|
|
||||||
Debug(net, 0, " this usually means that the master server cannot reach us");
|
|
||||||
Debug(net, 0, " please allow udp and tcp packets to port {} to be delivered", _settings_client.network.server_port);
|
|
||||||
Debug(net, 0, " please allow udp and tcp packets from port {} to be delivered", _settings_client.network.server_port);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Send the packet */
|
|
||||||
Packet p(PACKET_UDP_SERVER_REGISTER);
|
|
||||||
/* Packet is: WELCOME_MESSAGE, Version, server_port */
|
|
||||||
p.Send_string(NETWORK_MASTER_SERVER_WELCOME_MESSAGE);
|
|
||||||
p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION);
|
|
||||||
p.Send_uint16(_settings_client.network.server_port);
|
|
||||||
p.Send_uint64(_session_key);
|
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(_udp_master.mutex);
|
|
||||||
if (_udp_master.socket != nullptr) _udp_master.socket->SendPacket(&p, &out_addr, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register us to the master server
|
|
||||||
* This function checks if it needs to send an advertise
|
|
||||||
*/
|
|
||||||
void NetworkUDPAdvertise()
|
|
||||||
{
|
|
||||||
static std::chrono::steady_clock::time_point _last_advertisement = {}; ///< The last time we performed an advertisement.
|
|
||||||
|
|
||||||
/* Check if we should send an advertise */
|
|
||||||
if (!_networking || !_network_server || !_network_udp_server || !_settings_client.network.server_advertise) return;
|
|
||||||
|
|
||||||
if (_network_need_advertise) {
|
|
||||||
/* Forced advertisement. */
|
|
||||||
_network_need_advertise = false;
|
|
||||||
_network_advertise_retries = ADVERTISE_RETRY_TIMES;
|
|
||||||
} else {
|
|
||||||
/* Only send once every ADVERTISE_NORMAL_INTERVAL ticks */
|
|
||||||
if (_network_advertise_retries == 0) {
|
|
||||||
if (std::chrono::steady_clock::now() <= _last_advertisement + ADVERTISE_NORMAL_INTERVAL) return;
|
|
||||||
|
|
||||||
_network_advertise_retries = ADVERTISE_RETRY_TIMES;
|
|
||||||
} else {
|
|
||||||
/* An actual retry. */
|
|
||||||
if (std::chrono::steady_clock::now() <= _last_advertisement + ADVERTISE_RETRY_INTERVAL) return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_network_advertise_retries--;
|
|
||||||
_last_advertisement = std::chrono::steady_clock::now();
|
|
||||||
|
|
||||||
if (!StartNewThread(nullptr, "ottd:udp-advert", &NetworkUDPAdvertiseThread)) {
|
|
||||||
NetworkUDPAdvertiseThread();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Initialize the whole UDP bit. */
|
/** Initialize the whole UDP bit. */
|
||||||
void NetworkUDPInitialize()
|
void NetworkUDPInitialize()
|
||||||
{
|
{
|
||||||
@ -591,9 +444,9 @@ void NetworkUDPInitialize()
|
|||||||
if (_udp_server.socket != nullptr) NetworkUDPClose();
|
if (_udp_server.socket != nullptr) NetworkUDPClose();
|
||||||
|
|
||||||
Debug(net, 3, "Initializing UDP listeners");
|
Debug(net, 3, "Initializing UDP listeners");
|
||||||
assert(_udp_client.socket == nullptr && _udp_server.socket == nullptr && _udp_master.socket == nullptr);
|
assert(_udp_client.socket == nullptr && _udp_server.socket == nullptr);
|
||||||
|
|
||||||
std::scoped_lock lock(_udp_client.mutex, _udp_server.mutex, _udp_master.mutex);
|
std::scoped_lock lock(_udp_client.mutex, _udp_server.mutex);
|
||||||
|
|
||||||
_udp_client.socket = new ClientNetworkUDPSocketHandler();
|
_udp_client.socket = new ClientNetworkUDPSocketHandler();
|
||||||
|
|
||||||
@ -601,13 +454,8 @@ void NetworkUDPInitialize()
|
|||||||
GetBindAddresses(&server, _settings_client.network.server_port);
|
GetBindAddresses(&server, _settings_client.network.server_port);
|
||||||
_udp_server.socket = new ServerNetworkUDPSocketHandler(&server);
|
_udp_server.socket = new ServerNetworkUDPSocketHandler(&server);
|
||||||
|
|
||||||
server.clear();
|
|
||||||
GetBindAddresses(&server, 0);
|
|
||||||
_udp_master.socket = new MasterNetworkUDPSocketHandler(&server);
|
|
||||||
|
|
||||||
_network_udp_server = false;
|
_network_udp_server = false;
|
||||||
_network_udp_broadcast = 0;
|
_network_udp_broadcast = 0;
|
||||||
_network_advertise_retries = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Start the listening of the UDP server component. */
|
/** Start the listening of the UDP server component. */
|
||||||
@ -622,7 +470,6 @@ void NetworkUDPClose()
|
|||||||
{
|
{
|
||||||
_udp_client.CloseSocket();
|
_udp_client.CloseSocket();
|
||||||
_udp_server.CloseSocket();
|
_udp_server.CloseSocket();
|
||||||
_udp_master.CloseSocket();
|
|
||||||
|
|
||||||
_network_udp_server = false;
|
_network_udp_server = false;
|
||||||
_network_udp_broadcast = 0;
|
_network_udp_broadcast = 0;
|
||||||
@ -634,7 +481,6 @@ void NetworkBackgroundUDPLoop()
|
|||||||
{
|
{
|
||||||
if (_network_udp_server) {
|
if (_network_udp_server) {
|
||||||
_udp_server.ReceivePackets();
|
_udp_server.ReceivePackets();
|
||||||
_udp_master.ReceivePackets();
|
|
||||||
} else {
|
} else {
|
||||||
_udp_client.ReceivePackets();
|
_udp_client.ReceivePackets();
|
||||||
if (_network_udp_broadcast > 0) _network_udp_broadcast--;
|
if (_network_udp_broadcast > 0) _network_udp_broadcast--;
|
||||||
|
@ -16,8 +16,6 @@ void NetworkUDPInitialize();
|
|||||||
void NetworkUDPSearchGame();
|
void NetworkUDPSearchGame();
|
||||||
void NetworkUDPQueryMasterServer();
|
void NetworkUDPQueryMasterServer();
|
||||||
void NetworkUDPQueryServer(const std::string &connection_string, bool manually = false);
|
void NetworkUDPQueryServer(const std::string &connection_string, bool manually = false);
|
||||||
void NetworkUDPAdvertise();
|
|
||||||
void NetworkUDPRemoveAdvertise(bool blocking);
|
|
||||||
void NetworkUDPClose();
|
void NetworkUDPClose();
|
||||||
void NetworkUDPServerListen();
|
void NetworkUDPServerListen();
|
||||||
void NetworkBackgroundUDPLoop();
|
void NetworkBackgroundUDPLoop();
|
||||||
|
Loading…
Reference in New Issue
Block a user