mirror of https://github.com/OpenRCT2/OpenRCT2.git
request server gameinfo for window
This commit is contained in:
parent
7157199b45
commit
c66a755ef7
|
@ -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 */
|
||||
|
|
|
@ -144,6 +144,7 @@ public:
|
|||
void Server_Send_GROUPLIST(NetworkConnection& connection);
|
||||
void Server_Send_EVENT_PLAYER_JOINED(const char *playerName);
|
||||
void Server_Send_EVENT_PLAYER_DISCONNECTED(const char *playerName, const char *reason);
|
||||
void Client_Send_GAMEINFO();
|
||||
|
||||
std::vector<std::unique_ptr<NetworkPlayer>> player_list;
|
||||
std::vector<std::unique_ptr<NetworkGroup>> group_list;
|
||||
|
@ -151,6 +152,12 @@ public:
|
|||
std::vector<uint8> challenge;
|
||||
NetworkUserManager _userManager;
|
||||
|
||||
std::string ServerName;
|
||||
std::string ServerDescription;
|
||||
std::string ServerProviderName;
|
||||
std::string ServerProviderEmail;
|
||||
std::string ServerProviderWebsite;
|
||||
|
||||
private:
|
||||
bool ProcessConnection(NetworkConnection& connection);
|
||||
void ProcessPacket(NetworkConnection& connection, NetworkPacket& packet);
|
||||
|
@ -226,6 +233,7 @@ private:
|
|||
void Server_Handle_PING(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Client_Handle_PINGLIST(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Client_Handle_SETDISCONNECTMSG(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Server_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Client_Handle_SHOWERROR(NetworkConnection& connection, NetworkPacket& packet);
|
||||
void Client_Handle_GROUPLIST(NetworkConnection& connection, NetworkPacket& packet);
|
||||
|
@ -292,6 +300,11 @@ void network_set_password(const char* password);
|
|||
|
||||
void network_print_error();
|
||||
void network_append_chat_log(const utf8 *text);
|
||||
const utf8 * network_get_server_name();
|
||||
const utf8 * network_get_server_description();
|
||||
const utf8 * network_get_server_provider_name();
|
||||
const utf8 * network_get_server_provider_email();
|
||||
const utf8 * network_get_server_provider_website();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -442,23 +442,36 @@ static void window_multiplayer_information_paint(rct_window *w, rct_drawpixelinf
|
|||
int x = 3;
|
||||
int y = 50;
|
||||
int width = w->width - 6;
|
||||
gfx_draw_string_left_wrapped(dpi, &gConfigNetwork.server_name, x, y, width, STR_STRING, w->colours[1]);
|
||||
y += 11 + 3;
|
||||
if (!str_is_null_or_empty(gConfigNetwork.server_description)) {
|
||||
gfx_draw_string_left_wrapped(dpi, &gConfigNetwork.server_description, x, y, width, STR_STRING, w->colours[1]);
|
||||
|
||||
const utf8 * name = network_get_server_name();
|
||||
{
|
||||
gfx_draw_string_left_wrapped(dpi, (void*)&name, x, y, width, STR_STRING, w->colours[1]);
|
||||
y += 11;
|
||||
}
|
||||
y += 3;
|
||||
|
||||
const utf8 * description = network_get_server_description();
|
||||
if (!str_is_null_or_empty(description)) {
|
||||
gfx_draw_string_left_wrapped(dpi, (void*)&description, x, y, width, STR_STRING, w->colours[1]);
|
||||
y += 11;
|
||||
}
|
||||
y += 8;
|
||||
if (!str_is_null_or_empty(gConfigNetwork.provider_name)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_NAME, &gConfigNetwork.provider_name, 0, x, y);
|
||||
|
||||
const utf8 * providerName = network_get_server_provider_name();
|
||||
if (!str_is_null_or_empty(providerName)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_NAME, (void*)&providerName, 0, x, y);
|
||||
y += 11;
|
||||
}
|
||||
if (!str_is_null_or_empty(gConfigNetwork.provider_email)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_EMAIL, &gConfigNetwork.provider_email, 0, x, y);
|
||||
|
||||
const utf8 * providerEmail = network_get_server_provider_email();
|
||||
if (!str_is_null_or_empty(providerEmail)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_EMAIL, (void*)&providerEmail, 0, x, y);
|
||||
y += 11;
|
||||
}
|
||||
if (!str_is_null_or_empty(gConfigNetwork.provider_website)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_WEBSITE, &gConfigNetwork.provider_website, 0, x, y);
|
||||
|
||||
const utf8 * providerWebsite = network_get_server_provider_website();
|
||||
if (!str_is_null_or_empty(providerWebsite)) {
|
||||
gfx_draw_string_left(dpi, STR_PROVIDER_WEBSITE, (void*)&providerWebsite, 0, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue