1
0
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:
Ted John
2019-05-05 14:28:10 +00:00
parent 4f0a733496
commit 04c04d197e
3 changed files with 39 additions and 30 deletions

View File

@@ -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();

View File

@@ -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();

View File

@@ -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"