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:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user