summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/api_core.cpp16
-rw-r--r--server/src/main.cpp33
-rw-r--r--server/src/modules_handler.cpp2
-rw-r--r--server/src/server_session.cpp57
4 files changed, 77 insertions, 31 deletions
diff --git a/server/src/api_core.cpp b/server/src/api_core.cpp
index f9fe772..edc0e0a 100644
--- a/server/src/api_core.cpp
+++ b/server/src/api_core.cpp
@@ -30,27 +30,17 @@ extern runtime_config_s runtime_config;
bool core_api::metadata_set(module_base *m, const std::string &setting_name, const std::vector<char> &data)
{
- //print data
-/* std::cout<<"printing data in core set api:\n";
- for(auto i = data.begin(), end = data.end(); i != end; ++i)
- {
- std::cout<<*i;
- }
- std::cout<<std::endl; */
- runtime_config.default_metadata_storage->set(m->get_module_info().name, setting_name, data);
- return true;
+ return runtime_config.default_metadata_storage->set(m->get_module_info().name, setting_name, data);
}
bool core_api::metadata_get(module_base *m, const std::string &setting_name, std::vector<char> &data)
{
- runtime_config.default_metadata_storage->get(m->get_module_info().name, setting_name, data);
- return true;
+ return runtime_config.default_metadata_storage->get(m->get_module_info().name, setting_name, data);
}
bool core_api::metadata_remove(module_base *m, const std::string &setting_name)
{
- runtime_config.default_metadata_storage->remove(m->get_module_info().name, setting_name);
- return true;
+ return runtime_config.default_metadata_storage->remove(m->get_module_info().name, setting_name);
}
std::map<std::string, setting_s> core_api::get_module_settings(module_base *m)
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 09b0b62..214b6b5 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -52,15 +52,42 @@ server *serv = nullptr;
//TODO: "core" config section architecture, define base settings
-void sigint_handler(int sig)
+void on_exit()
{
+ serv->terminate();
bpt::write_info(runtime_config.config_file_path, runtime_config.config_file); //save config on sigint
- exit(0);
+ for(auto m : modules->get_downloader_modules())
+ delete m;
+ for(auto m : modules->get_metadata_modules())
+ delete m;
+}
+
+void sig_handler(int sig)
+{
+ switch(sig)
+ {
+ default:
+ {
+ on_exit();
+ exit(0);
+ }
+ break;
+ }
}
extern "C" int main(int argc, char *argv[])
{
- signal(SIGINT, sigint_handler);
+ //handle signals
+ signal(SIGINT, sig_handler);
+ signal(SIGTERM, sig_handler);
+ signal(SIGABRT, sig_handler);
+
+ //this will not work
+ signal(SIGKILL, sig_handler);
+ signal(SIGSTOP, sig_handler);
+
+
+
bpo::options_description desc("Available commands and options");
desc.add_options()
("help,h", "this message")
diff --git a/server/src/modules_handler.cpp b/server/src/modules_handler.cpp
index eb08261..90328b1 100644
--- a/server/src/modules_handler.cpp
+++ b/server/src/modules_handler.cpp
@@ -125,6 +125,7 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m
std::string buf;
for(auto i : modules)
{
+ //TODO: additional info for each module type
buf += "\tName: ";
buf += i->get_module_info().name;
buf += "\n\tDescription: " + i->get_module_info().description;
@@ -199,7 +200,6 @@ void modules_handler::sync_downloads(std::map<int, download_internal_s> &downloa
for(auto it : d->get_downloads())
{
downloads[id].module_name = d->get_module_info().name;
- downloads[id].core_id = id; //is it needed ?
downloads[id].module_id = it.id;
id++;
}
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp
index 1a3c08c..ff49408 100644
--- a/server/src/server_session.cpp
+++ b/server/src/server_session.cpp
@@ -346,11 +346,11 @@ bool server_session::handle_command(client_msg *msg)
break;
case CLIENT_MSG_TYPE::CLIENT_MODULES_REQUEST:
{
- server_msg msg;
- msg.set_type(SERVER_MSG_TYPE::SERVER_MODULES_REPLY);
+ server_msg m;
+ m.set_type(SERVER_MSG_TYPE::SERVER_MODULES_REPLY);
for(auto i : modules->get_downloader_modules())
{
- module_info *mi = msg.add_server_modules_reply();
+ module_info *mi = m.add_server_modules_reply();
mi->set_type(SERVER_MODULE_TYPE::SERVER_MODULE_DOWNLOADER);
mi->set_name(i->get_module_info().name);
mi->set_description(i->get_module_info().description);
@@ -378,7 +378,7 @@ bool server_session::handle_command(client_msg *msg)
}
for(auto i : modules->get_metadata_modules())
{
- module_info *mi = msg.add_server_modules_reply();
+ module_info *mi = m.add_server_modules_reply();
mi->set_type(SERVER_MODULE_TYPE::SERVER_MODULE_METADATA_STORAGE);
mi->set_name(i->get_module_info().name);
mi->set_description(i->get_module_info().description);
@@ -386,21 +386,21 @@ bool server_session::handle_command(client_msg *msg)
for(auto ms : i->get_runtime_module_settings())
add_runtime_module_setting(ms, mi);
}
- send_message(&msg);
+ send_message(&m);
}
break;
case CLIENT_MSG_TYPE::CLIENT_CORE_INFO_REQUEST:
{
- server_msg msg;
- msg.set_type(SERVER_MSG_TYPE::SERVER_CORE_INFO_REPLY);
- msg.mutable_server_core_info_reply()->set_version(1);
+ server_msg m;
+ m.set_type(SERVER_MSG_TYPE::SERVER_CORE_INFO_REPLY);
+ m.mutable_server_core_info_reply()->set_version(1);
try{
for(auto it : runtime_config.config_file.get_child("server")) //load server node
{
std::string val = it.second.get_value<std::string>("empty_value"); //TODO: something better here. we need to avoid subtrees and empty vars
if(/*val == "" ||*/ val == "empty_value")
continue;
- setting *i = msg.mutable_server_core_info_reply()->add_settings();
+ setting *i = m.mutable_server_core_info_reply()->add_settings();
i->set_name(it.first);
i->set_value(val);
//TODO: is it possible to set something better than just list of core setting ?
@@ -410,7 +410,7 @@ bool server_session::handle_command(client_msg *msg)
{
//TODO:
}
- send_message(&msg);
+ send_message(&m);
}
break;
@@ -418,11 +418,11 @@ bool server_session::handle_command(client_msg *msg)
{
//TODO: thread safety
//draft implementation, need a lot of optimizations
- server_msg msg;
- msg.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOADS_LIST_REPLY);
+ server_msg m;
+ m.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOADS_LIST_REPLY);
for(auto i : downloads)
{
- server_download_reply *r = msg.add_downloads();
+ server_download_reply *r = m.add_downloads();
download *d = r->mutable_download();
d->set_id(i.first); //set core_id for later access
d->set_module_name(i.second.module_name);
@@ -446,10 +446,39 @@ bool server_session::handle_command(client_msg *msg)
d->set_size(ds.size);
d->set_name(ds.name);
}
- send_message(&msg);
+ send_message(&m);
return true;
}
break;
+ case CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_ADD:
+ {
+ for(auto i : modules->get_downloader_modules())
+ {
+ if(i->get_module_info().name == msg->download_add_request().module_name())
+ {
+ std::map<int, std::string> params;
+ for(auto p : msg->download_add_request().params())
+ params[p.id()] = p.value();
+ auto dm = static_cast<module_downloader *>(i);
+ int download_id = dm->add_download(params);
+ int core_id = downloads.size();
+ downloads[core_id].module_id = download_id;
+ downloads[core_id].module_name = msg->download_add_request().module_name();
+ server_msg m;
+ m.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOAD_INFO_REPLY);
+ download *d = m.mutable_download()->mutable_download();
+ d->set_id(core_id);
+ auto dl = dm->get_download(download_id);
+ d->set_name(dl.name);
+ d->set_size(dl.size);
+ d->set_module_name(msg->download_add_request().module_name());
+ d->set_downloaded(dl.downloaded);
+ send_message(&m);
+
+ }
+ }
+ }
+ break;
default:
return false;
break;