diff options
-rw-r--r-- | server/include/client.h | 1 | ||||
-rw-r--r-- | server/include/event_subscription_base.h | 12 | ||||
-rw-r--r-- | server/include/server_session.h | 2 | ||||
-rw-r--r-- | server/src/client.cpp | 5 | ||||
-rw-r--r-- | server/src/server_session.cpp | 35 |
5 files changed, 51 insertions, 4 deletions
diff --git a/server/include/client.h b/server/include/client.h index 239ae4b..22b2ce8 100644 --- a/server/include/client.h +++ b/server/include/client.h @@ -32,6 +32,7 @@ class client public: client(std::string &client_auth_token, server_session *sess = nullptr); void add_event_subscription(event_subscription_base* e); + const std::list<event_subscription_base*>& get_subscriptions(); virtual ~client(); protected: private: diff --git a/server/include/event_subscription_base.h b/server/include/event_subscription_base.h index 0e5b790..97c6e62 100644 --- a/server/include/event_subscription_base.h +++ b/server/include/event_subscription_base.h @@ -37,9 +37,21 @@ public: { subscription_request = *req; } + bool operator==(const SUBSCRIPTION_TYPE t) + { + return subscription_request.type() == t; + } + const EVENT_SUBTYPE get_subtype() + { + return subtype; + } + virtual ~event_subscription_base(){} protected: EVENT_SUBTYPE subtype = EVENT_SUBTYPE::EVENT_SUBTYPE_EVENT; client_event_subscription_request subscription_request; }; + + + #endif // EVENT_SUBSCRIPTION_H diff --git a/server/include/server_session.h b/server/include/server_session.h index a4c570b..b03a38b 100644 --- a/server/include/server_session.h +++ b/server/include/server_session.h @@ -26,6 +26,7 @@ #include "config.h" #include "client.h" #include "download_internal.h" +#include "../../protocol/udm.pb.h" class client_msg; class server_msg; @@ -55,6 +56,7 @@ private: bool handle_command(client_msg* msg); void send_download_list(); + void fire_event(SUBSCRIPTION_TYPE type, server_msg &msg); char* recv_data_ = nullptr; socket_wraper* socket_ = nullptr; diff --git a/server/src/client.cpp b/server/src/client.cpp index 0990317..fdfd513 100644 --- a/server/src/client.cpp +++ b/server/src/client.cpp @@ -29,7 +29,10 @@ client::client(std::string &client_auth_token, server_session *sess) : auth_toke void client::add_event_subscription(event_subscription_base* e) { } - +const std::list<event_subscription_base*>& client::get_subscriptions() +{ + return subscriptions; +} client::~client() { //dtor diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index cc08b18..5287900 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -22,7 +22,7 @@ #include <boost/bind.hpp> #include <boost/log/trivial.hpp> #include "server_session.h" -#include "../../protocol/udm.pb.h" + #include "utilities.h" #include "socket_wraper.h" #include "client.h" @@ -470,8 +470,8 @@ bool server_session::handle_command(client_msg *msg) d->set_state(dl.state); d->set_module_name(msg->download_add_request().module_name()); d->set_downloaded(dl.downloaded); - send_message(&m); - //TODO: fire event + //TODO: fill event with info ? + fire_event(SUBSCRIPTION_TYPE::ST_DOWNLOAD_ADDED, m); break; } } @@ -488,10 +488,12 @@ bool server_session::handle_command(client_msg *msg) auto dm = static_cast<module_downloader *>(m); if(!dm->start_download(i.download_id())) { + //TODO: handle error } else { + //fire_event(SUBSCRIPTION_TYPE::); //TODO: fire event } break; @@ -634,6 +636,33 @@ void server_session::handle_write(const boost::system::error_code& error) // boost::asio::async_read(socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } +bool operator==(event_subscription_base* const e, const SUBSCRIPTION_TYPE t) +{ + return *e == t; +} + + +void server_session::fire_event(SUBSCRIPTION_TYPE type, server_msg &msg) +{ + for(auto i : clients) + { + for(auto s = std::find(i.second->get_subscriptions().begin(), i.second->get_subscriptions().end(), type); s != i.second->get_subscriptions().end(); s = std::find(s, i.second->get_subscriptions().end(), type)) + { + if((*s)->get_subtype() != EVENT_SUBTYPE::EVENT_SUBTYPE_EVENT) + continue; + switch(type) + { + case SUBSCRIPTION_TYPE::ST_DOWNLOAD_ADDED: + { + send_message(&msg); + } + break; + default: + break; + } + } + } +} server_session::~server_session() { |