Abstract transport layer (#7)
author장상윤/Tizen Platform Lab(SR)/Engineer/삼성전자 <jeremy.jang@samsung.com>
Fri, 20 Apr 2018 04:23:37 +0000 (13:23 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 20 Apr 2018 04:27:33 +0000 (13:27 +0900)
Add an abstract class ConnectionManager.
This class provides interfaces for implementation of transport layer.

Change-Id: Ie85788a44bebb597075e07655fe1a83fe14bdbb4
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/capmgr.cc
src/capmgr.h
src/connection_manager.h [new file with mode: 0644]
src/iotivity.cc
src/iotivity.h
src/main.cc

index 65587a5d856d9a07242fa818b31049d632b829c4..8f0099eb8bafb5258bba3b1af8935232dda69858 100644 (file)
@@ -8,14 +8,13 @@
 #include <signal.h>
 #include <sys/signalfd.h>
 
-#include "src/utils/logging.h"
+#include <functional>
 
-// iotivity headers should be included before boost headers...
-// this makes compilation warning. (redefinition)
-#include "src/iotivity.h"
 #include "src/capability_manager.h"
+#include "src/connection_manager.h"
 #include "src/dbus_service.h"
 #include "src/package_event_listener.h"
+#include "src/utils/logging.h"
 
 namespace {
 
@@ -50,7 +49,9 @@ gboolean SignalHandler(GIOChannel* channel, GIOCondition cond,
 
 namespace capmgr {
 
-Capmgr::Capmgr() {
+Capmgr::Capmgr(CapabilityManager* capmgr, ConnectionManager* connmgr,
+    DBusService* dbus, PackageEventListener* pkgmgr)
+    : cm_(capmgr), connmgr_(connmgr), dbus_(dbus), pkgmgr_(pkgmgr) {
   loop_ = g_main_loop_new(nullptr, FALSE);
   if (!loop_)
     LOG(ERROR) << "Failed to create main loop";
@@ -58,12 +59,6 @@ Capmgr::Capmgr() {
   src_ = RegisterSignalHandler();
   if (src_ == 0)
     LOG(ERROR) << "Failed to register signal handler";
-
-  cm_.reset(new CapabilityManager());
-  dbus_.reset(new DBusService());
-  // get raw pointer from unique_ptr. is it ok?
-  iotivity_.reset(new Iotivity(cm_.get()));
-  pkgmgr_.reset(new PackageEventListener());
 }
 
 Capmgr::~Capmgr() {
@@ -73,8 +68,14 @@ Capmgr::~Capmgr() {
 
 bool Capmgr::Initialize() {
   cm_->LoadCapabilities();
-  iotivity_->RegisterResource();
+  connmgr_->RegisterEndpoint();
   pkgmgr_->SubscribePackageEvent();
+
+  DBusService::RegisterMethodHandler("DiscoverUnownedDevices", std::bind(
+      &ConnectionManager::FindDevices, connmgr_.get()));
+  DBusService::RegisterMethodHandler("ExchangeCapabilities", std::bind(
+      &ConnectionManager::ExchangeCapabilities, connmgr_.get()));
+
   return true;
 }
 
index 2744928ce612b2f8d92458c3df70b83f0744c07d..a0afe5c9f93203c02e802cee6a51bac0247aecba 100644 (file)
 namespace capmgr {
 
 class CapabilityManager;
+class ConnectionManager;
 class DBusService;
-class Iotivity;
 class PackageEventListener;
 
 class Capmgr {
  public:
-  Capmgr();
+  explicit Capmgr(CapabilityManager* capmgr, ConnectionManager* connmgr,
+      DBusService* dbus, PackageEventListener* pkgmgr);
   ~Capmgr();
 
   bool Initialize();
@@ -31,9 +32,9 @@ class Capmgr {
   guint src_;
 
   std::unique_ptr<CapabilityManager> cm_;
+  std::unique_ptr<ConnectionManager> connmgr_;
   std::unique_ptr<DBusService> dbus_;
   std::unique_ptr<PackageEventListener> pkgmgr_;
-  std::unique_ptr<Iotivity> iotivity_;
 };
 
 }  // namespace capmgr
diff --git a/src/connection_manager.h b/src/connection_manager.h
new file mode 100644 (file)
index 0000000..00707e3
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache 2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef CONNECTION_MANAGER_H_
+#define CONNECTION_MANAGER_H_
+
+namespace capmgr {
+
+class CapabilityManager;
+
+class ConnectionManager {
+ public:
+  explicit ConnectionManager(CapabilityManager* capmgr) : capmgr_(capmgr) {}
+
+  virtual void FindDevices() = 0;
+  virtual void RegisterEndpoint() = 0;
+  virtual void ExchangeCapabilities() = 0;
+
+ protected:
+  CapabilityManager* capmgr_;
+};
+
+}  // namespace capmgr
+
+#endif  // CONNECTION_MANAGER_H_
index 7675bb6712bcde6a47cb4e52090c8e4dd443548e..d5ca55e33f32dd21d7746d1bf47ddc5706a687f8 100644 (file)
@@ -15,8 +15,8 @@
 #include <iostream>
 #include <string>
 
+#include "src/capability.h"
 #include "src/capability_manager.h"
-#include "src/dbus_service.h"
 #include "src/utils/logging.h"
 
 namespace {
@@ -65,7 +65,7 @@ void OtmEventCb(void* /* ctx */, const char* addr, uint16_t port,
 
 namespace capmgr {
 
-Iotivity::Iotivity(CapabilityManager* capmgr) {
+Iotivity::Iotivity(CapabilityManager* capmgr) : ConnectionManager(capmgr) {
   OCSetOtmEventHandler(nullptr, OtmEventCb);
 
   ps_ = {
@@ -89,16 +89,22 @@ Iotivity::Iotivity(CapabilityManager* capmgr) {
       kSystemTime);
   result = OCPlatform::registerPlatformInfo(platformInfo);
 */
+}
 
-  DBusService::RegisterMethodHandler("DiscoverUnownedDevices", std::bind(
-      &Iotivity::DiscoverUnownedDevices, this));
-  DBusService::RegisterMethodHandler("ExchangeCapabilities", std::bind(
-      &Iotivity::ExchangeCapabilities, this));
+Iotivity::~Iotivity() {
+}
 
-  capmgr_ = capmgr;
+void Iotivity::FindDevices() {
+  DiscoverUnownedDevices();
 }
 
-Iotivity::~Iotivity() {
+void Iotivity::RegisterEndpoint() {
+  RegisterResource();
+}
+
+void Iotivity::ExchangeCapabilities() {
+  for (const auto& it : resource_list_)
+    GetResource(it.second);
 }
 
 void Iotivity::RegisterResource() {
@@ -123,11 +129,6 @@ void Iotivity::FindResource(const std::string& addr) {
     LOG(ERROR) << "OCPlatform::findResource() failed: " << result;
 }
 
-void Iotivity::ExchangeCapabilities() {
-  for (const auto& it : resource_list_)
-    GetResource(it.second);
-}
-
 void Iotivity::DiscoverUnownedDevices() {
   if (OC::OCSecure::provisionInit(PM_DB_PATH) != OC_STACK_OK)
     LOG(ERROR) << "provisionInit() failed!";
index 9104506689efd26dc7302d70206dc159877edc5d..07252a79d5de9566f8cb5687624a8e16b4b91dda 100644 (file)
 #include <map>
 #include <memory>
 
+#include "src/connection_manager.h"
+
 namespace capmgr {
 
 class CapabilityManager;
 
-class Iotivity {
+class Iotivity : public ConnectionManager {
  public:
-  Iotivity(CapabilityManager* capmgr);
+  explicit Iotivity(CapabilityManager* capmgr);
   ~Iotivity();
 
+  void FindDevices() override;
+  void RegisterEndpoint() override;
+  void ExchangeCapabilities() override;
+
+ private:
   void RegisterResource();
   void FindResource(const std::string& addr);
-  void ExchangeCapabilities();
   void DiscoverUnownedDevices();
-
- private:
   void OwnershipTransfer();
   void GetResource(std::shared_ptr<OC::OCResource> resource);
   OCEntityHandlerResult EntityCb(
@@ -41,8 +45,6 @@ class Iotivity {
   std::map<OC::OCResourceIdentifier, std::shared_ptr<OC::OCResource>>
       resource_list_;
   OC::DeviceList_t unowned_dev_list_;
-
-  CapabilityManager* capmgr_;
 };
 
 }  // namespace capmgr
index 49f7afa4e109bda39c85746c6302004ed0b9c717..9dff21bc661d779afaf4f4d5d3137944d0fed959 100644 (file)
@@ -2,11 +2,21 @@
 // Use of this source code is governed by a apache 2.0 license that can be
 // found in the LICENSE file.
 
+// iotivity headers should be included before boost headers...
+// this makes compilation warning. (redefinition)
+#include "src/iotivity.h"
+#include "src/capability_manager.h"
 #include "src/capmgr.h"
+#include "src/dbus_service.h"
+#include "src/package_event_listener.h"
 #include "src/utils/logging.h"
 
 int main(int argc, char* argv[]) {
-  capmgr::Capmgr capmgr;
+  capmgr::CapabilityManager *cm = new capmgr::CapabilityManager();
+  capmgr::Iotivity* iotivity = new capmgr::Iotivity(cm);
+  capmgr::DBusService* dbus = new capmgr::DBusService();
+  capmgr::PackageEventListener* pkgmgr = new capmgr::PackageEventListener();
+  capmgr::Capmgr capmgr(cm, iotivity, dbus, pkgmgr);
   if (!capmgr.Initialize()) {
     LOG(ERROR) << "Initialize failed!";
     return 1;