summaryrefslogtreecommitdiff
path: root/server/src/server_session.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-09-15 12:49:00 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-09-15 12:49:00 +0300
commitf4750dc7ca9ce56c54352c03bb40affe1a64c315 (patch)
treee5ff58ae92b0c49f5624644611ea05312eebe1ed /server/src/server_session.cpp
parent1d6ced38a89547aaf2cc3745876360f0e5086474 (diff)
client-qt:
implemented handler for SERVER_DOWNLOAD_INFO_REPLY server: api: removed core_id field from download_internal_s as it always used for index in download map some useful coments core: improoved signal handler a bit fiexd bug in core_api metadata related functions (metadata_set, metadata_get, metadata_remove), now thay returning correct data basic implementation of CLIENT_DOWNLOAD_ADD handler basic implementation of module unloading curl_downloader_module: implemented metadata storing some sanity checks curl_download structure refactored a bit (simplification)
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;