fix master server communication

This commit is contained in:
IntelOrca 2015-11-08 03:55:30 +00:00
parent 0b9882b96f
commit d2aa736492
3 changed files with 23 additions and 13 deletions

View File

@ -69,6 +69,10 @@ http_json_response *http_request_json(const char *url)
writeBuffer.length = 0;
writeBuffer.capacity = 0;
curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
curl_easy_setopt(curl, CURLOPT_CAINFO, "curl-ca-bundle.crt");

View File

@ -615,7 +615,7 @@ void Network::UpdateServer()
switch (advertise_status) {
case ADVERTISE_STATUS_UNREGISTERED:
if (SDL_TICKS_PASSED(SDL_GetTicks(), last_advertise_time + MASTER_SERVER_REGISTER_TIME)) {
if (last_advertise_time == 0 || SDL_TICKS_PASSED(SDL_GetTicks(), last_advertise_time + MASTER_SERVER_REGISTER_TIME)) {
AdvertiseRegister();
}
break;
@ -856,7 +856,7 @@ void Network::AdvertiseRegister()
// Send the registration request
std::string url = GetMasterServerUrl()
+ std::string("?command=register&port=") + std::to_string(listening_port)
+ std::string("key=") + advertise_key;
+ std::string("&key=") + advertise_key;
http_request_json_async(url.c_str(), [](http_json_response *response) -> void {
if (response == NULL) {
log_warning("Unable to connect to master server");
@ -892,8 +892,7 @@ void Network::AdvertiseHeartbeat()
// Send the heartbeat request
std::string url = GetMasterServerUrl()
+ std::string("?command=heartbeat&token=") + advertise_token
+ std::string("key=") + advertise_key
+ std::string("players=") + std::to_string(network_get_num_players());
+ std::string("&players=") + std::to_string(network_get_num_players());
// TODO send status data (e.g. players) via JSON body

View File

@ -684,32 +684,39 @@ static void fetch_servers_callback(http_json_response* response)
return;
}
int count = json_array_size(response->root);
int count = json_array_size(jsonServers);
for (int i = 0; i < count; i++) {
json_t *server = json_array_get(response->root, i);
json_t *server = json_array_get(jsonServers, i);
if (!json_is_object(server)) {
continue;
}
json_t *address = json_object_get(server, "address");
json_t *port = json_object_get(server, "port");
json_t *name = json_object_get(server, "name");
json_t *description = json_object_get(server, "description");
json_t *requiresPassword = json_object_get(server, "requiresPassword");
json_t *version = json_object_get(server, "version");
json_t *players = json_object_get(server, "players");
json_t *maxplayers = json_object_get(server, "maxPlayers");
json_t *description = json_object_get(server, "description");
json_t *maxPlayers = json_object_get(server, "maxPlayers");
json_t *ip = json_object_get(server, "ip");
json_t *ip4 = json_object_get(ip, "v4");
json_t *ip6 = json_object_get(ip, "v6");
json_t *addressIp = json_array_get(ip4, 0);
char address[256];
snprintf(address, sizeof(address), "%s:%d", json_string_value(addressIp), (int)json_integer_value(port));
SDL_LockMutex(_mutex);
saved_server* newserver = add_saved_server((char*)json_string_value(address));
saved_server* newserver = add_saved_server(address);
SafeFree(newserver->name);
SafeFree(newserver->description);
SafeFree(newserver->version);
newserver->name = _strdup(json_string_value(name));
newserver->requiresPassword = json_boolean_value(requiresPassword);
SafeFree(newserver->description);
newserver->description = _strdup(json_string_value(description));
SafeFree(newserver->version);
newserver->version = _strdup(json_string_value(version));
newserver->players = (uint8)json_integer_value(players);
newserver->maxplayers = (uint8)json_integer_value(maxplayers);
newserver->maxplayers = (uint8)json_integer_value(maxPlayers);
SDL_UnlockMutex(_mutex);
}
http_request_json_dispose(response);