1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

request server gameinfo for window

This commit is contained in:
Ted John
2016-05-30 22:25:43 +01:00
parent 7157199b45
commit c66a755ef7
3 changed files with 98 additions and 10 deletions

View File

@@ -111,6 +111,7 @@ Network::Network()
client_command_handlers[NETWORK_COMMAND_SHOWERROR] = &Network::Client_Handle_SHOWERROR;
client_command_handlers[NETWORK_COMMAND_GROUPLIST] = &Network::Client_Handle_GROUPLIST;
client_command_handlers[NETWORK_COMMAND_EVENT] = &Network::Client_Handle_EVENT;
client_command_handlers[NETWORK_COMMAND_GAMEINFO] = &Network::Client_Handle_GAMEINFO;
client_command_handlers[NETWORK_COMMAND_TOKEN] = &Network::Client_Handle_TOKEN;
server_command_handlers.resize(NETWORK_COMMAND_MAX, 0);
server_command_handlers[NETWORK_COMMAND_AUTH] = &Network::Server_Handle_AUTH;
@@ -142,6 +143,12 @@ bool Network::Init()
#endif
status = NETWORK_STATUS_READY;
ServerName = std::string();
ServerDescription = std::string();
ServerProviderName = std::string();
ServerProviderEmail = std::string();
ServerProviderWebsite = std::string();
return true;
}
@@ -303,6 +310,12 @@ bool Network::BeginServer(unsigned short port, const char* address)
return false;
}
ServerName = gConfigNetwork.server_name;
ServerDescription = gConfigNetwork.server_description;
ServerProviderName = gConfigNetwork.provider_name;
ServerProviderEmail = gConfigNetwork.provider_email;
ServerProviderWebsite = gConfigNetwork.provider_website;
cheats_reset();
LoadGroups();
BeginChatLog();
@@ -1487,6 +1500,9 @@ void Network::Client_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p
{
packet >> (uint32&)connection.AuthStatus >> (uint8&)player_id;
switch(connection.AuthStatus) {
case NETWORK_AUTH_OK:
Client_Send_GAMEINFO();
break;
case NETWORK_AUTH_BADNAME:
connection.SetLastDisconnectReason(STR_MULTIPLAYER_BAD_PLAYER_NAME);
shutdown(connection.Socket, SHUT_RDWR);
@@ -1518,6 +1534,8 @@ void Network::Client_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p
shutdown(connection.Socket, SHUT_RDWR);
break;
default:
connection.SetLastDisconnectReason(STR_MULTIPLAYER_INCORRECT_SOFTWARE_VERSION);
shutdown(connection.Socket, SHUT_RDWR);
break;
}
}
@@ -1913,6 +1931,39 @@ void Network::Client_Handle_EVENT(NetworkConnection& connection, NetworkPacket&
}
}
void Network::Client_Send_GAMEINFO()
{
log_verbose("requesting gameinfo");
std::unique_ptr<NetworkPacket> packet = std::move(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_GAMEINFO;
server_connection.QueuePacket(std::move(packet));
}
std::string json_stdstring_value(const json_t * string)
{
const char * cstr = json_string_value(string);
return cstr == nullptr ? std::string() : std::string(cstr);
}
void Network::Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet)
{
const char * jsonString = packet.ReadString();
json_error_t error;
json_t *root = json_loads(jsonString, 0, &error);
ServerName = json_stdstring_value(json_object_get(root, "name"));
ServerDescription = json_stdstring_value(json_object_get(root, "description"));
json_t *jsonProvider = json_object_get(root, "provider");
if (jsonProvider != nullptr) {
ServerProviderName = json_stdstring_value(json_object_get(root, "name"));
ServerProviderEmail = json_stdstring_value(json_object_get(root, "email"));
ServerProviderWebsite = json_stdstring_value(json_object_get(root, "website"));
}
json_decref(root);
}
int network_init()
{
return gNetwork.Init();
@@ -2394,6 +2445,12 @@ static void network_get_keymap_path(utf8 *buffer, size_t bufferSize)
Path::Append(buffer, bufferSize, "keymappings.json");
}
const utf8 * network_get_server_name() { return gNetwork.ServerName.c_str(); }
const utf8 * network_get_server_description() { return gNetwork.ServerDescription.c_str(); }
const utf8 * network_get_server_provider_name() { return gNetwork.ServerProviderName.c_str(); }
const utf8 * network_get_server_provider_email() { return gNetwork.ServerProviderEmail.c_str(); }
const utf8 * network_get_server_provider_website() { return gNetwork.ServerProviderWebsite.c_str(); }
#else
int network_get_mode() { return NETWORK_MODE_NONE; }
int network_get_status() { return NETWORK_STATUS_NONE; }
@@ -2441,4 +2498,9 @@ void network_set_password(const char* password) {}
uint8 network_get_current_player_id() { return 0; }
int network_get_current_player_group_index() { return 0; }
void network_append_chat_log(const utf8 *text) { }
const utf8 * network_get_server_name() { return nullptr; }
const utf8 * network_get_server_description() { return nullptr; }
const utf8 * network_get_server_provider_name() { return nullptr; }
const utf8 * network_get_server_provider_email() { return nullptr; }
const utf8 * network_get_server_provider_website() { return nullptr; }
#endif /* DISABLE_NETWORK */