1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-17 03:53:07 +01:00

Merge pull request #9212 from IntelOrca/fix/2339-broadcast-lan

Implement searching of local servers by broadcasting UDP packets.
This commit is contained in:
Ted John
2019-05-12 12:07:56 +01:00
committed by GitHub
17 changed files with 1132 additions and 433 deletions

View File

@@ -75,7 +75,7 @@ static constexpr uint32_t CHUNK_SIZE = 1024 * 63;
# include "NetworkPlayer.h"
# include "NetworkServerAdvertiser.h"
# include "NetworkUser.h"
# include "TcpSocket.h"
# include "Socket.h"
# include <algorithm>
# include <array>
@@ -201,6 +201,7 @@ public:
void Server_Send_OBJECTS(NetworkConnection& connection, const std::vector<const ObjectRepositoryItem*>& objects) const;
NetworkStats_t GetStats() const;
json_t* GetServerInfoAsJson() const;
std::vector<std::unique_ptr<NetworkPlayer>> player_list;
std::vector<std::unique_ptr<NetworkGroup>> group_list;
@@ -680,11 +681,7 @@ bool Network::BeginServer(uint16_t port, const std::string& address)
status = NETWORK_STATUS_CONNECTED;
listening_port = port;
_serverState.gamestateSnapshotsEnabled = gConfigNetwork.desync_debugging;
if (gConfigNetwork.advertise)
{
_advertiser = CreateServerAdvertiser(listening_port);
}
_advertiser = CreateServerAdvertiser(listening_port);
if (gConfigNetwork.pause_server_if_no_clients)
{
@@ -1814,11 +1811,8 @@ void Network::Server_Send_SETDISCONNECTMSG(NetworkConnection& connection, const
connection.QueuePacket(std::move(packet));
}
void Network::Server_Send_GAMEINFO(NetworkConnection& connection)
json_t* Network::GetServerInfoAsJson() const
{
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32_t)NETWORK_COMMAND_GAMEINFO;
# ifndef DISABLE_HTTP
json_t* obj = json_object();
json_object_set_new(obj, "name", json_string(gConfigNetwork.server_name.c_str()));
json_object_set_new(obj, "requiresPassword", json_boolean(_password.size() > 0));
@@ -1828,6 +1822,15 @@ void Network::Server_Send_GAMEINFO(NetworkConnection& connection)
json_object_set_new(obj, "description", json_string(gConfigNetwork.server_description.c_str()));
json_object_set_new(obj, "greeting", json_string(gConfigNetwork.server_greeting.c_str()));
json_object_set_new(obj, "dedicated", json_boolean(gOpenRCT2Headless));
return obj;
}
void Network::Server_Send_GAMEINFO(NetworkConnection& connection)
{
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32_t)NETWORK_COMMAND_GAMEINFO;
# ifndef DISABLE_HTTP
json_t* obj = GetServerInfoAsJson();
// Provider details
json_t* jsonProvider = json_object();
@@ -4179,6 +4182,10 @@ bool network_gamestate_snapshots_enabled()
return network_get_server_state().gamestateSnapshotsEnabled;
}
json_t* network_get_server_info_as_json()
{
return gNetwork.GetServerInfoAsJson();
}
#else
int32_t network_get_mode()
{
@@ -4436,4 +4443,8 @@ NetworkServerState_t network_get_server_state()
{
return NetworkServerState_t{};
}
json_t* network_get_server_info_as_json()
{
return nullptr;
}
#endif /* DISABLE_NETWORK */