]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/serverlist.cpp
Made unknown nodes stop falling nodes properly and shorten lines
[dragonfireclient.git] / src / serverlist.cpp
index 6a68e0eacc0ad31febfe82e859f6b459e248c0e4..fb5bc9c87d6b21e32cd7a6a089561b40020cc8eb 100644 (file)
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <sstream>
 #include <algorithm>
 
+#include "version.h"
 #include "main.h" // for g_settings
 #include "settings.h"
 #include "serverlist.h"
@@ -105,13 +106,11 @@ bool deleteEntry (ServerListSpec server)
        }
 
        std::string path = ServerList::getFilePath();
-       std::ofstream stream (path.c_str());
-       if (stream.is_open())
-       {
-               stream<<ServerList::serialize(serverlist);
-               return true;
-       }
-       return false;
+       std::ostringstream ss(std::ios_base::binary);
+       ss << ServerList::serialize(serverlist);
+       if (!fs::safeWriteToFile(path, ss.str()))
+               return false;
+       return true;
 }
 
 /*
@@ -128,11 +127,9 @@ bool insert (ServerListSpec server)
        serverlist.insert(serverlist.begin(), server);
 
        std::string path = ServerList::getFilePath();
-       std::ofstream stream (path.c_str());
-       if (stream.is_open())
-       {
-               stream<<ServerList::serialize(serverlist);
-       }
+       std::ostringstream ss(std::ios_base::binary);
+       ss << ServerList::serialize(serverlist);
+       fs::safeWriteToFile(path, ss.str());
 
        return false;
 }
@@ -194,34 +191,47 @@ std::string serializeJson(std::vector<ServerListSpec> serverlist)
 #if USE_CURL
 static size_t ServerAnnounceCallback(void *contents, size_t size, size_t nmemb, void *userp)
 {
-    return 0;
     //((std::string*)userp)->append((char*)contents, size * nmemb);
-    //return size * nmemb;
+    return size * nmemb;
 }
-void sendAnnounce(std::string action, u16 clients, double uptime, std::string gameid) {
+void sendAnnounce(std::string action, const std::vector<std::string> & clients_names, double uptime, u32 game_time, std::string gameid, std::vector<ModSpec> mods) {
        Json::Value server;
        if (action.size())
                server["action"]        = action;
-       server["port"] = g_settings->get("port");
-        if (action != "del") {
+       server["port"]          = g_settings->get("port");
+       server["address"]       = g_settings->get("server_address");
+       if (action != "delete") {
                server["name"]          = g_settings->get("server_name");
                server["description"]   = g_settings->get("server_description");
-               server["address"]       = g_settings->get("server_address");
-               server["version"]       = VERSION_STRING;
+               server["version"]       = minetest_version_simple;
                server["url"]           = g_settings->get("server_url");
                server["creative"]      = g_settings->get("creative_mode");
                server["damage"]        = g_settings->get("enable_damage");
-               server["dedicated"]     = g_settings->get("server_dedicated");
                server["password"]      = g_settings->getBool("disallow_empty_password");
                server["pvp"]           = g_settings->getBool("enable_pvp");
-               server["clients"]       = clients;
+               server["clients"]       = (int)clients_names.size();
                server["clients_max"]   = g_settings->get("max_users");
-               if (uptime >=1) server["uptime"] = (int)uptime;
-               if (gameid!="") server["gameid"] = gameid;
-               
+               server["clients_list"]  = Json::Value(Json::arrayValue);
+               for(u32 i = 0; i < clients_names.size(); ++i) {
+                       server["clients_list"].append(clients_names[i]);
+               }
+               if (uptime >= 1)        server["uptime"]        = (int)uptime;
+               if (gameid != "")       server["gameid"]        = gameid;
+               if (game_time >= 1)     server["game_time"]     = game_time;
        }
-       if(server["action"] == "start")
+
+       if(server["action"] == "start") {
+               server["dedicated"]     = g_settings->get("server_dedicated");
+               server["rollback"]      = g_settings->getBool("enable_rollback_recording");
+               server["liquid_finite"] = g_settings->getBool("liquid_finite");
+               server["mapgen"]        = g_settings->get("mg_name");
+               server["mods"]          = Json::Value(Json::arrayValue);
+               for(std::vector<ModSpec>::iterator m = mods.begin(); m != mods.end(); m++) {
+                       server["mods"].append(m->name);
+               }
                actionstream << "announcing to " << g_settings->get("serverlist_url") << std::endl;
+       }
+
        Json::StyledWriter writer;
        CURL *curl;
        curl = curl_easy_init();
@@ -236,8 +246,8 @@ void sendAnnounce(std::string action, u16 clients, double uptime, std::string ga
                curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1);
                curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 1);
                res = curl_easy_perform(curl);
-               //if (res != CURLE_OK)
-               //      errorstream<<"Serverlist at url "<<g_settings->get("serverlist_url")<<" not found (internet connection?)"<<std::endl;
+               if (res != CURLE_OK)
+                       errorstream<<"Serverlist at url "<<g_settings->get("serverlist_url")<<" error ("<<curl_easy_strerror(res)<<")"<<std::endl;
                curl_easy_cleanup(curl);
        }