diff --git a/src/openrct2/network/NetworkServerAdvertiser.cpp b/src/openrct2/network/NetworkServerAdvertiser.cpp index bdfaa4beda..e593d0db1e 100644 --- a/src/openrct2/network/NetworkServerAdvertiser.cpp +++ b/src/openrct2/network/NetworkServerAdvertiser.cpp @@ -47,8 +47,6 @@ enum MASTER_SERVER_STATUS constexpr int32_t MASTER_SERVER_REGISTER_TIME = 120 * 1000; // 2 minutes constexpr int32_t MASTER_SERVER_HEARTBEAT_TIME = 60 * 1000; // 1 minute -constexpr int32_t LAN_BROADCAST_PORT = 11754; - class NetworkServerAdvertiser final : public INetworkServerAdvertiser { private: @@ -84,13 +82,23 @@ public: } void Update() override + { + UpdateLAN(); + if (gConfigNetwork.advertise) + { + UpdateWAN(); + } + } + +private: + void UpdateLAN() { auto ticks = Platform::GetTicks(); if (ticks > _lastListenTime + 500) { if (_lanListener->GetStatus() != SOCKET_STATUS_LISTENING) { - _lanListener->Listen(LAN_BROADCAST_PORT); + _lanListener->Listen(NETWORK_LAN_BROADCAST_PORT); } else { @@ -101,12 +109,12 @@ public: if (p == NETWORK_READPACKET_SUCCESS) { std::string sender = endpoint->GetHostname(); - std::printf("\r>> Received %zu bytes from %s\n", recievedBytes, sender.c_str()); + log_verbose("Received %zu bytes from %s on LAN broadcast port", recievedBytes, sender.c_str()); auto body = GetBroadcastJson(); auto bodyDump = json_dumps(body, JSON_COMPACT); size_t sendLen = strlen(bodyDump) + 1; - std::printf("\r>> Sending %zu bytes back to %s\n", sendLen, sender.c_str()); + log_verbose("Sending %zu bytes back to %s", sendLen, sender.c_str()); _lanListener->SendData(*endpoint, bodyDump, sendLen); free(bodyDump); json_decref(body); @@ -114,33 +122,30 @@ public: } _lastListenTime = ticks; } + } - if (gConfigNetwork.advertise) + void UpdateWAN() + { + switch (_status) { - /* - switch (_status) - { - case ADVERTISE_STATUS::UNREGISTERED: - if (_lastAdvertiseTime == 0 || platform_get_ticks() > _lastAdvertiseTime + MASTER_SERVER_REGISTER_TIME) - { - SendRegistration(_forceIPv4); - } - break; - case ADVERTISE_STATUS::REGISTERED: - if (platform_get_ticks() > _lastHeartbeatTime + MASTER_SERVER_HEARTBEAT_TIME) - { - SendHeartbeat(); - } - break; - // exhaust enum values to satisfy clang - case ADVERTISE_STATUS::DISABLED: - break; - } - */ + case ADVERTISE_STATUS::UNREGISTERED: + if (_lastAdvertiseTime == 0 || platform_get_ticks() > _lastAdvertiseTime + MASTER_SERVER_REGISTER_TIME) + { + SendRegistration(_forceIPv4); + } + break; + case ADVERTISE_STATUS::REGISTERED: + if (platform_get_ticks() > _lastHeartbeatTime + MASTER_SERVER_HEARTBEAT_TIME) + { + SendHeartbeat(); + } + break; + // exhaust enum values to satisfy clang + case ADVERTISE_STATUS::DISABLED: + break; } } -private: void SendRegistration(bool forceIPv4) { _lastAdvertiseTime = platform_get_ticks(); diff --git a/src/openrct2/network/ServerList.cpp b/src/openrct2/network/ServerList.cpp index c4501b97a6..a7fe3ca586 100644 --- a/src/openrct2/network/ServerList.cpp +++ b/src/openrct2/network/ServerList.cpp @@ -217,15 +217,18 @@ std::future> ServerList::FetchLocalServerListAsync( constexpr auto RECV_DELAY_MS = 10; constexpr auto RECV_WAIT_MS = 2000; - std::vector entries; + auto broadcastAddress = "192.168.1.255"; + std::string msg = "Are you an OpenRCT2 server?"; auto udpSocket = CreateUdpSocket(); - auto len = udpSocket->SendData("192.168.1.255", 11754, msg.data(), msg.size()); + log_verbose("Broadcasting %zu bytes to the LAN (%s)", msg.size(), broadcastAddress); + auto len = udpSocket->SendData(broadcastAddress, NETWORK_LAN_BROADCAST_PORT, msg.data(), msg.size()); if (len != msg.size()) { throw std::runtime_error("Unable to broadcast server query."); } + std::vector entries; char buffer[1024]{}; size_t recievedLen{}; std::unique_ptr endpoint; @@ -235,7 +238,7 @@ std::future> ServerList::FetchLocalServerListAsync( if (p == NETWORK_READPACKET_SUCCESS) { auto sender = endpoint->GetHostname(); - std::printf(">> Recieved packet from %s\n", sender.c_str()); + log_verbose("Received %zu bytes back from %s", recievedLen, sender.c_str()); auto jinfo = Json::FromString(std::string_view(buffer)); auto ip4 = json_array(); diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index 080e567639..0859cd4c42 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -10,6 +10,7 @@ #pragma once #define NETWORK_DEFAULT_PORT 11753 +#define NETWORK_LAN_BROADCAST_PORT 11754 #define MAX_SERVER_DESCRIPTION_LENGTH 256 #include "../common.h"