diff options
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r-- | server/src/server_session.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index ee15426..0d92341 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -478,6 +478,8 @@ bool server_session::handle_command(client_msg *msg) break; case CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_START: { + server_msg s_msg; + s_msg.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOAD_STATE_CHANGE); for(auto i : msg->download_start_request()) { for(auto m : modules->get_downloader_modules()) @@ -492,17 +494,21 @@ bool server_session::handle_command(client_msg *msg) } else { - //fire_event(SUBSCRIPTION_TYPE::); - //TODO: fire event + auto dsc = s_msg.add_download_state_changes(); + dsc->set_download_id(i.download_id()); + dsc->set_state(SUBSCRIPTION_DOWNLOAD_STATE::SDS_STARTED); } break; } } } + fire_event(SUBSCRIPTION_TYPE::ST_DOWNLOAD_STATE_CHANGE, s_msg); } break; case CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_STOP: { + server_msg s_msg; + s_msg.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOAD_STATE_CHANGE); for(auto i : msg->download_stop_request()) { for(auto m : modules->get_downloader_modules()) @@ -516,12 +522,15 @@ bool server_session::handle_command(client_msg *msg) } else { - //TODO: fire event + auto dsc = s_msg.add_download_state_changes(); + dsc->set_download_id(i.download_id()); + dsc->set_state(SUBSCRIPTION_DOWNLOAD_STATE::SDS_STOPPED); } break; } } } + fire_event(SUBSCRIPTION_TYPE::ST_DOWNLOAD_STATE_CHANGE, s_msg); } break; case CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_DELETE: @@ -657,6 +666,21 @@ void server_session::fire_event(SUBSCRIPTION_TYPE type, server_msg &msg) send_message(&msg); } break; + case SUBSCRIPTION_TYPE::ST_DOWNLOAD_STATE_CHANGE: + { + server_msg filtered_message; //use new message to send only events from subscription and filter out all other download state change events + filtered_message.set_type(msg.type()); + for(auto sc : msg.download_state_changes()) + { + auto dsc = std::find((*s)->get_subscription_request().download_state_change().states().begin(), (*s)->get_subscription_request().download_state_change().states().end(), sc.state()); + if(dsc != (*s)->get_subscription_request().download_state_change().states().end()) + { + auto sc2 = filtered_message.add_download_state_changes(); + *sc2 = sc; + } + } + send_message(&filtered_message); + } default: break; } |