diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-28 21:21:02 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-28 21:21:02 +0300 |
commit | 6f3f670abe3d2d78a13cd3862e3a587dd4fe4e85 (patch) | |
tree | 0d681fd23bf2e70e385d053aee1e54dbe08668b1 /server/src | |
parent | ba8247eaf522e8a129b7fbbf09a6fab010746e3a (diff) |
protocol:
typo fix
added description to setting_info
server:
api:
using structure with setting info instead of hust string for just value (a bit of necessary complication)
renamed few structs to avoid collision with protobuf ones
defined few module variables in api itself (a bit of simplification for module developer)
modules:
adapted to api changes
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/api_core.cpp | 6 | ||||
-rw-r--r-- | server/src/modules_handler.cpp | 29 | ||||
-rw-r--r-- | server/src/server_session.cpp | 30 |
3 files changed, 45 insertions, 20 deletions
diff --git a/server/src/api_core.cpp b/server/src/api_core.cpp index b407928..f9fe772 100644 --- a/server/src/api_core.cpp +++ b/server/src/api_core.cpp @@ -53,15 +53,15 @@ bool core_api::metadata_remove(module_base *m, const std::string &setting_name) return true; } -std::map<std::string, std::string> core_api::get_module_settings(module_base *m) +std::map<std::string, setting_s> core_api::get_module_settings(module_base *m) { - std::map<std::string, std::string> settings; + std::map<std::string, setting_s> settings; std::string module = "modules."; module += m->get_module_info().name; try{ for(auto i : runtime_config.config_file.get_child(module)) { - settings[i.first] = i.second.get_value<std::string>(""); + settings[i.first].value = i.second.get_value<std::string>(""); } } catch(...) diff --git a/server/src/modules_handler.cpp b/server/src/modules_handler.cpp index 32c3b9f..6d351bb 100644 --- a/server/src/modules_handler.cpp +++ b/server/src/modules_handler.cpp @@ -137,7 +137,7 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m buf += "\n\t\t"; buf += i1.first; buf += " = "; - buf += i1.second; + buf += i1.second.value; } } buf += "\n\n"; @@ -147,12 +147,13 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m void modules_handler::sync_module_settings(module_base *m) { + //update config file with available modules settings for(auto i : m->get_module_info().default_settings) { std::string setting = "modules." + m->get_module_info().name + "." + i.first; - std::string current_val = runtime_config.config_file.get<std::string>(setting, "not set"), default_val = i.second; - if(current_val == "not set" || current_val != default_val) - runtime_config.config_file.put(setting, i.second); + std::string current_val = runtime_config.config_file.get<std::string>(setting, "not set"); + if(current_val == "not set") + runtime_config.config_file.put(setting, i.second.value); } } @@ -177,24 +178,24 @@ void modules_handler::load_modules() void modules_handler::on_modules_loaded() { - for(auto i = metadata_modules.begin(), end = metadata_modules.end(); i != end; ++i) + for(auto i : metadata_modules) { - if(!(*i)->get_module_info().on_modules_loaded.empty()) - (*i)->get_module_info().on_modules_loaded(); + if(!i->get_module_info().on_modules_loaded.empty()) + i->get_module_info().on_modules_loaded(); } - for(auto i = downloader_modules.begin(), end = downloader_modules.end(); i != end; ++i) + for(auto i : downloader_modules) { - if(!(*i)->get_module_info().on_modules_loaded.empty()) - (*i)->get_module_info().on_modules_loaded(); + if(!i->get_module_info().on_modules_loaded.empty()) + i->get_module_info().on_modules_loaded(); } } void modules_handler::load_modules_settings() { - for(auto i = metadata_modules.begin(), end = metadata_modules.end(); i != end; ++i) - (*i)->set_module_settings(module_api->get_module_settings(*i)); - for(auto i = downloader_modules.begin(), end = downloader_modules.end(); i != end; ++i) - (*i)->set_module_settings(module_api->get_module_settings(*i)); + for(auto i : metadata_modules) + i->set_module_settings(module_api->get_module_settings(i)); + for(auto i : downloader_modules) + i->set_module_settings(module_api->get_module_settings(i)); } std::list<module_base*> &modules_handler::get_metadata_modules() diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index 64f2cfe..3affc5f 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -26,8 +26,10 @@ #include "utilities.h" #include "socket_wraper.h" #include "client.h" +#include "modules_handler.h" extern std::map<std::string, client> clients; +extern modules_handler *modules; @@ -183,8 +185,6 @@ void server_session::handle_command(client_msg *msg) } else client_ = i->second; - - //set auth token } send_message(&m); @@ -192,11 +192,35 @@ void server_session::handle_command(client_msg *msg) break; case CLIENT_MSG_TYPE::CLIENT_MODULES_REQUEST: { - //TODO: + server_msg msg; + msg.set_type(SERVER_MSG_TYPE::SERVER_MODULES_REPLY); + for(auto i : modules->get_downloader_modules()) + { + module_info *mi = msg.add_server_modules_reply(); + mi->set_name(i->get_module_info().name); + mi->set_description(i->get_module_info().description); + mi->set_version(i->get_module_info().version); + for(auto ms : i->get_runtime_module_settings()) + { + setting *msi = mi->add_settings(); + msi->set_name(ms.first); + msi->set_value(ms.second.value); + for(auto di : ms.second.info.dependencies) + msi->mutable_info()->add_dependencies(di); + for(auto bi : ms.second.info.blockers) + msi->mutable_info()->add_blockers(bi); + msi->mutable_info()->set_default_value(ms.second.info.default_value); + msi->mutable_info()->set_minimal_value(ms.second.info.minimal_value); + msi->mutable_info()->set_maximal_value(ms.second.info.maximal_value); + msi->mutable_info()->set_description(ms.second.info.description); + } + } + send_message(&msg); } break; case CLIENT_MSG_TYPE::CLIENT_CORE_INFO_REQUEST: { + //TODO: settings values here server_msg msg; msg.set_type(SERVER_MSG_TYPE::SERVER_CORE_INFO_REPLY); msg.mutable_server_core_info_reply()->set_version(1); |