mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-04 13:42:55 +01:00
Refactor broadcasting code and logging
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -217,15 +217,18 @@ std::future<std::vector<ServerListEntry>> ServerList::FetchLocalServerListAsync(
|
||||
constexpr auto RECV_DELAY_MS = 10;
|
||||
constexpr auto RECV_WAIT_MS = 2000;
|
||||
|
||||
std::vector<ServerListEntry> 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<ServerListEntry> entries;
|
||||
char buffer[1024]{};
|
||||
size_t recievedLen{};
|
||||
std::unique_ptr<INetworkEndpoint> endpoint;
|
||||
@@ -235,7 +238,7 @@ std::future<std::vector<ServerListEntry>> 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();
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user