diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-10-27 05:44:22 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-10-27 05:44:22 +0300 |
commit | 3d2c1d3c24e40573e391040048ff734cd052c295 (patch) | |
tree | f5b72764a4431841b996df8540664b5167a6eed4 /server/src | |
parent | 89dbfd1a2e9cee5bb7c219ba121e7e922d7dfa7a (diff) |
protocol:
tiny enum value names correction
server:
event subscription subsystem:
a bit of implementation of repeated event type
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/event_subscription_event.cpp | 2 | ||||
-rw-r--r-- | server/src/event_subscription_repeated.cpp | 33 | ||||
-rw-r--r-- | server/src/main.cpp | 3 | ||||
-rw-r--r-- | server/src/server_session.cpp | 4 |
4 files changed, 37 insertions, 5 deletions
diff --git a/server/src/event_subscription_event.cpp b/server/src/event_subscription_event.cpp index 10ca824..f209f67 100644 --- a/server/src/event_subscription_event.cpp +++ b/server/src/event_subscription_event.cpp @@ -21,7 +21,7 @@ #include "event_subscription_event.h" -event_subscription_event::event_subscription_event(client_event_subscription_request *req) +event_subscription_event::event_subscription_event(client_event_subscription_request *req) : event_subscription_base(req) { subtype = EVENT_SUBTYPE_EVENT; } diff --git a/server/src/event_subscription_repeated.cpp b/server/src/event_subscription_repeated.cpp index 13e0165..bc41f7a 100644 --- a/server/src/event_subscription_repeated.cpp +++ b/server/src/event_subscription_repeated.cpp @@ -20,13 +20,44 @@ #include "event_subscription_repeated.h" +#include <boost/bind.hpp> -event_subscription_repeated::event_subscription_repeated(client_event_subscription_request *req) +extern boost::asio::io_service io_service_server; + + +event_subscription_repeated::event_subscription_repeated(client_event_subscription_request *req) : event_subscription_base(req) { subtype = EVENT_SUBTYPE_REPEATED; + timer = new deadline_timer(io_service_server, boost::posix_time::milliseconds(req->interval())); + timer->async_wait(boost::bind(&event_subscription_repeated::timer_handler, this, _1)); } event_subscription_repeated::~event_subscription_repeated() { + delete timer; } + +void event_subscription_repeated::timer_handler(const boost::system::error_code &e) +{ + if(!e) + { + //TODO: fire event + if(!subscription_request.one_time()) + { + timer->expires_from_now(boost::posix_time::milliseconds(subscription_request.interval())); + timer->async_wait(boost::bind(&event_subscription_repeated::timer_handler, this, _1)); + } + else + { + //TODO: remove entry from events subscription list in client object + delete this; + } + } + else + { + //TODO: handle error + //TODO: remove entry from events subscription list in client object + delete this; + } +} diff --git a/server/src/main.cpp b/server/src/main.cpp index 214b6b5..5ca4422 100644 --- a/server/src/main.cpp +++ b/server/src/main.cpp @@ -75,6 +75,8 @@ void sig_handler(int sig) } } +boost::asio::io_service io_service_server; + extern "C" int main(int argc, char *argv[]) { //handle signals @@ -248,7 +250,6 @@ extern "C" int main(int argc, char *argv[]) { //TODO: fork here } - boost::asio::io_service io_service_server; try{ //TODO: server options ip address, interface name serv = new server(io_service_server, runtime_config, clients, downloads, runtime_config.config_file.get<int>("server.port", 6613)); diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index 113a756..cc08b18 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -552,13 +552,13 @@ bool server_session::handle_command(client_msg *msg) { switch(i.mode()) { - case SUBSCRIPTION_MODE::S_MODE_EVENT: + case SUBSCRIPTION_MODE::SM_EVENT: { event_subscription_event *e = new event_subscription_event(&i); client_->add_event_subscription(e); } break; - case SUBSCRIPTION_MODE::S_MODE_REPEATED: + case SUBSCRIPTION_MODE::SM_REPEATED: { event_subscription_repeated *e = new event_subscription_repeated(&i); client_->add_event_subscription(e); |