Add user defined callback to StatusMonitor 39/30739/2
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 24 Nov 2014 16:58:29 +0000 (17:58 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Sat, 6 Dec 2014 01:03:24 +0000 (02:03 +0100)
User can pass now own function, that will be executed when status changes.

Change-Id: Ic3f514f18c780aff51cf62114fc3cf98dac70067

tests/cynara-tests/common/cynara_test_client_async_client.cpp
tests/cynara-tests/common/cynara_test_client_async_client.h
tests/cynara-tests/common/cynara_test_client_async_status_monitor.cpp
tests/cynara-tests/common/cynara_test_client_async_status_monitor.h

index 5a68936..b6159c5 100644 (file)
@@ -44,8 +44,8 @@ CheckData::CheckData(const std::string &major, int minor) : CheckData(major, std
 {
 }
 
-Client::Client()
-    : m_cynara(nullptr)
+Client::Client(const StatusFunction &userFunction)
+    : m_cynara(nullptr), m_statusMonitor(userFunction)
 {
     int ret = cynara_async_initialize(&m_cynara, nullptr, StatusMonitor::updateStatus,
                                       reinterpret_cast<void*>(&m_statusMonitor));
index 7ebd401..77f891f 100644 (file)
@@ -47,7 +47,7 @@ public:
         IGNORE_TIMEOUT,
     };
 
-    Client();
+    Client(const StatusFunction &userFunction = StatusFunction());
     ~Client() noexcept(false);
 
     void assertStatus(enum SocketStatus expectedStatus);
index 47b1104..2a2e0ae 100644 (file)
@@ -20,8 +20,8 @@
 
 namespace CynaraTestClientAsync {
 
-StatusMonitor::StatusMonitor()
-    : m_fd(-1), m_status(CYNARA_STATUS_FOR_READ)
+StatusMonitor::StatusMonitor(const StatusFunction &userFunction)
+    : m_fd(-1), m_status(CYNARA_STATUS_FOR_READ), m_userFunction(userFunction)
 {
 }
 
@@ -40,6 +40,8 @@ void StatusMonitor::updateStatus(int oldFd, int newFd, cynara_async_status statu
 
     monitor->m_fd = newFd;
     monitor->m_status = status;
+    if (monitor->m_userFunction)
+        monitor->m_userFunction(oldFd, newFd, status);
 }
 
 int StatusMonitor::getFd(void) const
index 31ce9b1..b09f3d0 100644 (file)
@@ -19,6 +19,8 @@
 
 #include <cynara-client-async.h>
 
+#include <functional>
+
 namespace CynaraTestClientAsync {
 
 enum SocketStatus
@@ -29,11 +31,13 @@ enum SocketStatus
     UNKNOWN,
 };
 
+typedef std::function<void(int oldFd, int newFd, cynara_async_status status)> StatusFunction;
+
 class StatusMonitor
 {
 public:
 
-    StatusMonitor();
+    StatusMonitor(const StatusFunction &userFunction);
 
     static void updateStatus(int oldFd, int newFd, cynara_async_status status, void *data);
 
@@ -43,6 +47,7 @@ public:
 private:
     int m_fd;
     cynara_async_status m_status;
+    StatusFunction m_userFunction;
 };
 
 }// namespace CynaraTestClientAsync