diff options
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r-- | server/src/server_session.cpp | 57 |
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; |