diff options
author | rubidium <rubidium@openttd.org> | 2009-04-05 19:43:41 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-04-05 19:43:41 +0000 |
commit | 0678cb561dd15a1e557f7c472eae30ed59c84095 (patch) | |
tree | 6968c32ee920928ca9dc33468f8e633950ed9eb5 /src/network/network_udp.cpp | |
parent | ebb1ed660101445922e457893516de2394ce44b3 (diff) | |
download | openttd-0678cb561dd15a1e557f7c472eae30ed59c84095.tar.xz |
(svn r15961) -Codechange: prepare the 'client' side for receiving 'session keys' from the masterserver so servers can register with multiple IPs as the same server.
Diffstat (limited to 'src/network/network_udp.cpp')
-rw-r--r-- | src/network/network_udp.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 77de8fcd2..c1a775d46 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -28,6 +28,9 @@ ThreadMutex *_network_udp_mutex = ThreadMutex::New(); +/** Session key to register ourselves to the master server */ +static uint64 _session_key = 0; + enum { ADVERTISE_NORMAL_INTERVAL = 30000, // interval between advertising in ticks (15 minutes) ADVERTISE_RETRY_INTERVAL = 300, // readvertise when no response after this many ticks (9 seconds) @@ -43,6 +46,7 @@ NetworkUDPSocketHandler *_udp_master_socket = NULL; ///< udp master socket class MasterNetworkUDPSocketHandler : public NetworkUDPSocketHandler { protected: DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER); + DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_SESSION_KEY); public: virtual ~MasterNetworkUDPSocketHandler() {} }; @@ -56,6 +60,12 @@ DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_ACK_REGISTER) if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(); } +DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_SESSION_KEY) +{ + _session_key = p->Recv_uint64(); + DEBUG(net, 2, "[udp] received new session key from master server"); +} + ///*** Communication with clients (we are server) ***/ class ServerNetworkUDPSocketHandler : public NetworkUDPSocketHandler { @@ -503,6 +513,7 @@ void NetworkUDPAdvertiseThread(void *pntr) 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); _network_udp_mutex->BeginCritical(); if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr); |