summaryrefslogtreecommitdiff
path: root/server/src/server_session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r--server/src/server_session.cpp57
1 files changed, 43 insertions, 14 deletions
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;