summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-10-27 05:44:22 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-10-27 05:44:22 +0300
commit3d2c1d3c24e40573e391040048ff734cd052c295 (patch)
treef5b72764a4431841b996df8540664b5167a6eed4 /server/src
parent89dbfd1a2e9cee5bb7c219ba121e7e922d7dfa7a (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.cpp2
-rw-r--r--server/src/event_subscription_repeated.cpp33
-rw-r--r--server/src/main.cpp3
-rw-r--r--server/src/server_session.cpp4
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);