Server configuration is now written when "/#setting whatever = whatever" is issued.
authorPerttu Ahola <celeron55@gmail.com>
Sat, 30 Jul 2011 16:49:42 +0000 (19:49 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 30 Jul 2011 16:49:42 +0000 (19:49 +0300)
src/game.cpp
src/game.h
src/main.cpp
src/server.cpp
src/server.h
src/servercommand.cpp
src/servermain.cpp

index 74b8e50298e7d386afb49a4efd00c6c05ab7e257..6c0474ee70688d51608294b9028c44f8dcc9d98d 100644 (file)
@@ -715,7 +715,8 @@ void the_game(
        std::string password,
        std::string address,
        u16 port,
-       std::wstring &error_message
+       std::wstring &error_message,
+    std::string configpath
 )
 {
        video::IVideoDriver* driver = device->getVideoDriver();
@@ -755,7 +756,7 @@ void the_game(
        if(address == ""){
                draw_load_screen(L"Creating server...", driver, font);
                std::cout<<DTIME<<"Creating server"<<std::endl;
-               server = new Server(map_dir);
+               server = new Server(map_dir, configpath);
                server->start(port);
        }
        
index eb289b8f27f2df2dc141ce74bbf28d3469c1b029..95623316a8c19650010189ee3eddf2faf75b7340 100644 (file)
@@ -70,7 +70,8 @@ void the_game(
        std::string password,
        std::string address,
        u16 port,
-       std::wstring &error_message
+       std::wstring &error_message,
+       std::string configpath
 );
 
 #endif
index 9a9b22f87fa54e840f8caa03b39a8400083bcd42..3cc7489541c1f56bc7a5681eafb4c0cc823df505 100644 (file)
@@ -1302,7 +1302,7 @@ int main(int argc, char *argv[])
                g_timegetter = new SimpleTimeGetter();
                
                // Create server
-               Server server(map_dir.c_str());
+               Server server(map_dir.c_str(), configpath);
                server.start(port);
                
                // Run server
@@ -1641,7 +1641,8 @@ int main(int argc, char *argv[])
                                password,
                                address,
                                port,
-                               error_message
+                               error_message,
+                               configpath
                        );
 
                } //try
index 0b312fbc3e838d9a9e7a0ebb3fe4788379ad04d8..96e64b3142aa8a5cbcb7c3f7e41fc732712d783d 100644 (file)
@@ -1058,7 +1058,8 @@ u32 PIChecksum(core::list<PlayerInfo> &l)
 */
 
 Server::Server(
-               std::string mapsavedir
+               std::string mapsavedir,
+               std::string configpath
        ):
        m_env(new ServerMap(mapsavedir), this),
        m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
@@ -1069,6 +1070,7 @@ Server::Server(
        m_time_of_day_send_timer(0),
        m_uptime(0),
        m_mapsavedir(mapsavedir),
+       m_configpath(configpath),
        m_shutdown_requested(false),
        m_ignore_map_edit_events(false),
        m_ignore_map_edit_events_peer_id(0)
@@ -3198,7 +3200,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                        message = message.substr(commandprefix.size());
                        
                        WStrfnd f1(message);
-                       f1.next(L" ");
+                       f1.next(L" "); // Skip over /#whatever
                        std::wstring paramstring = f1.next(L"");
 
                        ServerCommandContext *ctx = new ServerCommandContext(
@@ -4023,9 +4025,9 @@ std::wstring Server::getStatusString()
        }
        os<<L"}";
        if(((ServerMap*)(&m_env.getMap()))->isSavingEnabled() == false)
-               os<<std::endl<<" WARNING: Map saving is disabled.";
+               os<<std::endl<<L"# Server: "<<" WARNING: Map saving is disabled.";
        if(g_settings.get("motd") != "")
-               os<<std::endl<<narrow_to_wide(g_settings.get("motd"));
+               os<<std::endl<<L"# Server: "<<narrow_to_wide(g_settings.get("motd"));
        return os.str();
 }
 
index 1da004da57c78f8d805352906406b3623093d339..c300d40e6e7adbcbfc9b068054bdad31540e6b94 100644 (file)
@@ -364,7 +364,8 @@ public:
        */
 
        Server(
-               std::string mapsavedir
+               std::string mapsavedir,
+               std::string configpath
        );
        ~Server();
        void start(unsigned short port);
@@ -443,6 +444,13 @@ public:
                        dstream<<"WARNING: Auth not found for "<<name<<std::endl;
                }
        }
+       
+       // Saves g_settings to configpath given at initialization
+       void saveConfig()
+       {
+               if(m_configpath != "")
+                       g_settings.updateConfigFile(m_configpath.c_str());
+       }
 
 private:
 
@@ -606,6 +614,9 @@ private:
        // Map directory
        std::string m_mapsavedir;
 
+       // Configuration path ("" = no configuration file)
+       std::string m_configpath;
+
        bool m_shutdown_requested;
        
        /*
index a2001b0c515ce1cd4c798b4624b96f5159e71ac1..7d6d7bb73e6dbfdf967bead0e39c59e796cb1ff5 100644 (file)
@@ -142,10 +142,16 @@ void cmd_setting(std::wostringstream &os,
                return;
        }
 
-       std::string confline = wide_to_narrow(
-                       ctx->parms[1] + L" = " + ctx->paramstring);
+       /*std::string confline = wide_to_narrow(
+                       ctx->parms[1] + L" = " + ctx->params[2]);*/
+
+       std::string confline = wide_to_narrow(ctx->paramstring);
+       
        g_settings.parseConfigLine(confline);
-       os<< L"-!- Setting changed.";
+       
+       ctx->server->saveConfig();
+
+       os<< L"-!- Setting changed and configuration saved.";
 }
 
 void cmd_teleport(std::wostringstream &os,
index 146c548c506d4a16c9e40f2cc3cff7fb152274aa..91fd1d3a50f35e681c3b2e8b98f16f1387805212 100644 (file)
@@ -323,7 +323,7 @@ int main(int argc, char *argv[])
                map_dir = g_settings.get("map-dir");
        
        // Create server
-       Server server(map_dir.c_str());
+       Server server(map_dir.c_str(), configpath);
        server.start(port);
 
        // Run server