diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/include/event_subscription_base.h | 4 | ||||
-rw-r--r-- | server/src/server_session.cpp | 30 |
2 files changed, 31 insertions, 3 deletions
diff --git a/server/include/event_subscription_base.h b/server/include/event_subscription_base.h index 97c6e62..aac316b 100644 --- a/server/include/event_subscription_base.h +++ b/server/include/event_subscription_base.h @@ -45,6 +45,10 @@ public: { return subtype; } + const client_event_subscription_request& get_subscription_request() + { + return subscription_request; + } virtual ~event_subscription_base(){} protected: 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; } |