From 81b879f5daf3bebbe2e9ffacd0ebcb59620cbc30 Mon Sep 17 00:00:00 2001 From: "jyong2.kim" Date: Wed, 10 Jun 2015 19:01:16 +0900 Subject: [PATCH] Add ResourceBroker Sconscript fix build error and syntax error. change from normal pointer to smart pointer. Change-Id: I52ea5b2cf6b7da34fed9f9271e942f45185fae20 Signed-off-by: jyong2.kim Reviewed-on: https://gerrit.iotivity.org/gerrit/1231 Tested-by: jenkins-iotivity Reviewed-by: Madan Lanka Reviewed-by: Uze Choi --- service/basis/resourceBroker/SConscript | 74 ++++++++++++++++++++++ service/basis/resourceBroker/include/BrokerTypes.h | 20 +++++- .../basis/resourceBroker/include/DevicePresence.h | 10 ++- .../basis/resourceBroker/include/ResourceBroker.h | 12 ++-- .../resourceBroker/include/ResourcePresence.h | 12 ++-- .../basis/resourceBroker/src/DevicePresence.cpp | 30 ++++----- .../basis/resourceBroker/src/ResourceBroker.cpp | 52 ++++++++------- .../basis/resourceBroker/src/ResourcePresence.cpp | 11 ++-- 8 files changed, 151 insertions(+), 70 deletions(-) create mode 100644 service/basis/resourceBroker/SConscript diff --git a/service/basis/resourceBroker/SConscript b/service/basis/resourceBroker/SConscript new file mode 100644 index 0000000..b9169ac --- /dev/null +++ b/service/basis/resourceBroker/SConscript @@ -0,0 +1,74 @@ +#****************************************************************** +# +# Copyright 2015 Samsung Electronics All Rights Reserved. +# +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +## +# ResourceBroker build script +## + +Import('env') + +if env.get('RELEASE'): + env.AppendUnique(CCFLAGS = ['-Os']) + env.AppendUnique(CPPDEFINES = ['NDEBUG']) +else: + env.AppendUnique(CCFLAGS = ['-g']) + +if env.get('LOGGING'): + env.AppendUnique(CPPDEFINES = ['TB_LOG']) + +lib_env = env.Clone() +SConscript(env.get('SRC_DIR') + '/service/third_party_libs.scons', 'lib_env') +resourcebroker_env = lib_env.Clone() + +target_os = env.get('TARGET_OS') +###################################################################### +# Build flags +###################################################################### +resourcebroker_env.AppendUnique(CPPPATH = ['include']) +resourcebroker_env.AppendUnique(CPPPATH = ['../common/primitiveResource/include']) +resourcebroker_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'libcoap']) + +if target_os not in ['windows', 'winrt']: + resourcebroker_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-fmessage-length=0', '-std=c++0x']) + +if target_os == 'linux': + resourcebroker_env.AppendUnique(LIBS = ['pthread']) + +###################################################################### +# Source files and Targets +###################################################################### +CACHE_SRC_DIR = 'src/' +resourcebroker_src = [ + CACHE_SRC_DIR + 'ResourceBroker.cpp', + CACHE_SRC_DIR + 'ResourcePresence.cpp', + CACHE_SRC_DIR + '../../common/primitiveResource/src/PrimitiveResource.cpp', + CACHE_SRC_DIR + '../../common/primitiveResource/src/ResourceAttributes.cpp', + CACHE_SRC_DIR + 'DevicePresence.cpp'] + +if target_os in ['tizen','android'] : + resourcebrokersdk = resourcebroker_env.SharedLibrary('ResourceBroker', resourcebroker_src) +else : + resourcebrokersdk = resourcebroker_env.StaticLibrary('ResourceBroker', resourcebroker_src) + +resourcebroker_env.InstallTarget(resourcebrokersdk, 'libResouceBroker') + +# Go to build sample apps +#SConscript('SampleApp/SConscript') + diff --git a/service/basis/resourceBroker/include/BrokerTypes.h b/service/basis/resourceBroker/include/BrokerTypes.h index 13cf464..c8c624d 100755 --- a/service/basis/resourceBroker/include/BrokerTypes.h +++ b/service/basis/resourceBroker/include/BrokerTypes.h @@ -30,14 +30,25 @@ #include "PrimitiveResource.h" #define BROKER_TAG PCF("BROKER") -#define BASE_LAYER_C 0 #define BROKER_TRANSPORT OCConnectivityType::OC_IPV4 +struct BrokerRequesterInfo; +class ResourcePresence; +class DevicePresence; + +enum class DISCOVER_TRANSACTION; +enum class BROKER_STATE; + typedef std::function)> FindCB; +typedef std::function resource)> DiscoverCB; typedef std::function BrokerCB; -typedef std::function resource)> DiscoverCB; +typedef std::shared_ptr PrimitiveResourcePtr; +typedef std::shared_ptr BrokerRequesterInfoPtr; + +typedef std::shared_ptr ResourcePresencePtr; +typedef std::shared_ptr DevicePresencePtr; enum class DISCOVER_TRANSACTION { @@ -53,6 +64,11 @@ enum class BROKER_STATE DESTROYED }; +struct BrokerRequesterInfo +{ + BrokerCB brockerCB; +}; + typedef OC::OCPlatform::OCPresenceHandle BasePresenceHandle; typedef std::function SubscribeCallback; diff --git a/service/basis/resourceBroker/include/DevicePresence.h b/service/basis/resourceBroker/include/DevicePresence.h index 05c7882..1d57f99 100755 --- a/service/basis/resourceBroker/include/DevicePresence.h +++ b/service/basis/resourceBroker/include/DevicePresence.h @@ -30,18 +30,16 @@ class DevicePresence { public: - DevicePresence(PrimitiveResource & pResource, BrokerCB _cb); + DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); ~DevicePresence(); - DevicePresence * createPresenceHandler(PrimitiveResource & pResource, BrokerCB _cb); - - void addPresenceResource(PrimitiveResource & pResource, BrokerCB _cb); - ResourcePresence * findResourcePresence(PrimitiveResource & pResource, BrokerCB _cb); + void addPresenceResource(PrimitiveResourcePtr pResource, BrokerCB _cb); + ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); private: SubscribeCallback pSubscribeRequestCB; - std::list * presenceResourceList; + std::unique_ptr> presenceResourceList; BasePresenceHandle presenceHandle; void subscribeCB(OCStackResult ret, const unsigned int seq, const std::string& msg); diff --git a/service/basis/resourceBroker/include/ResourceBroker.h b/service/basis/resourceBroker/include/ResourceBroker.h index 6af94f3..f0b70a7 100755 --- a/service/basis/resourceBroker/include/ResourceBroker.h +++ b/service/basis/resourceBroker/include/ResourceBroker.h @@ -36,11 +36,11 @@ class ResourceBroker public: ResourceBroker * getInstance(); - OCStackResult hostResource(PrimitiveResource & pResource, BrokerCB cb); + OCStackResult hostResource(PrimitiveResourcePtr pResource, BrokerCB cb); - OCStackResult cancelHostResource(PrimitiveResource & pResource); + OCStackResult cancelHostResource(PrimitiveResourcePtr pResource); - OCStackResult getResourceState(PrimitiveResource & pResource); + OCStackResult getResourceState(PrimitiveResourcePtr pResource); private: ResourceBroker(); @@ -48,10 +48,10 @@ private: static ResourceBroker * s_instance; static std::mutex s_mutexForCreation; - static std::list< DevicePresence * > s_presenceList; + static std::unique_ptr> s_presenceList; - ResourcePresence * findResourcePresence(PrimitiveResource& pResource, BrokerCB cb); - DevicePresence * findDevicePresence(PrimitiveResource& pResource, BrokerCB cb); + ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb); + DevicePresencePtr findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb); }; #endif /* RESOURCEBROKER_H_ */ diff --git a/service/basis/resourceBroker/include/ResourcePresence.h b/service/basis/resourceBroker/include/ResourcePresence.h index 9d754f5..47bf8ea 100755 --- a/service/basis/resourceBroker/include/ResourcePresence.h +++ b/service/basis/resourceBroker/include/ResourcePresence.h @@ -23,18 +23,14 @@ #include #include +#include #include "BrokerTypes.h" -struct BrokerRequesterInfo -{ - BrokerCB brockerCB; -}; - class ResourcePresence { public: - ResourcePresence(PrimitiveResource & pResource, BrokerCB _cb); + ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); ~ResourcePresence(); void addBrokerRequesterCB(BrokerCB _cb); @@ -44,9 +40,9 @@ public: void requestResourceState(); private: - PrimitiveResource & primitiveResource; + PrimitiveResourcePtr primitiveResource; - std::list * requesterList; + std::unique_ptr> requesterList; GetCallback pGetCB; void GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq); diff --git a/service/basis/resourceBroker/src/DevicePresence.cpp b/service/basis/resourceBroker/src/DevicePresence.cpp index aba8f32..28b9e77 100755 --- a/service/basis/resourceBroker/src/DevicePresence.cpp +++ b/service/basis/resourceBroker/src/DevicePresence.cpp @@ -20,16 +20,16 @@ #include "DevicePresence.h" -DevicePresence::DevicePresence(PrimitiveResource & pResource, BrokerCB _cb) +DevicePresence::DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) { - address = pResource.getHost(); pSubscribeRequestCB = std::bind(&DevicePresence::subscribeCB, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - presenceResourceList = new std::list(); + presenceResourceList + = std::unique_ptr>(new std::list); addPresenceResource(pResource, _cb); - OC::OCPlatform::subscribePresence(presenceHandle, address, + OC::OCPlatform::subscribePresence(presenceHandle, pResource->getHost(), BROKER_TRANSPORT, pSubscribeRequestCB); } @@ -38,37 +38,35 @@ DevicePresence::~DevicePresence() // TODO Auto-generated destructor stub OC::OCPlatform::unsubscribePresence(presenceHandle); presenceResourceList->clear(); - delete presenceResourceList; } -void DevicePresence::addPresenceResource(PrimitiveResource & pResource, BrokerCB _cb) +void DevicePresence::addPresenceResource(PrimitiveResourcePtr pResource, BrokerCB _cb) { - ResourcePresence * newPresenceResource = new ResourcePresence(pResource, _cb); + ResourcePresencePtr newPresenceResource = ResourcePresencePtr(new ResourcePresence(pResource, _cb)); presenceResourceList->push_back(newPresenceResource); } -ResourcePresence * DevicePresence::findPresenceResource(PrimitiveResource & pResource, BrokerCB _cb) +ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) { - ResourcePresence * retResource = NULL; - if (presenceResourceList->empty() || pResource.isEmpty()) + ResourcePresencePtr retResource(nullptr); + if (presenceResourceList->empty())// || pResource.isEmpty()) { - return NULL; + return retResource; } else { - std::list::iterator it; + std::list::iterator it; - ResourcePresence * temp = new ResourcePresence(pResource, _cb); + ResourcePresencePtr temp = ResourcePresencePtr(new ResourcePresence(pResource, _cb)); it = std::find(presenceResourceList->begin(), presenceResourceList->end(), temp); - delete temp; if(it == presenceResourceList->end()) { - return NULL; + return retResource; } else { - retResource = it; + retResource = *it; } } diff --git a/service/basis/resourceBroker/src/ResourceBroker.cpp b/service/basis/resourceBroker/src/ResourceBroker.cpp index 9a7822c..8ec9f3a 100755 --- a/service/basis/resourceBroker/src/ResourceBroker.cpp +++ b/service/basis/resourceBroker/src/ResourceBroker.cpp @@ -25,25 +25,24 @@ #define DEFAULT_CONTEXT_VALUE 0x99 ResourceBroker * ResourceBroker::s_instance = NULL; -std::list< DevicePresence * > ResourceBroker::s_presenceList = NULL; +std::unique_ptr> ResourceBroker::s_presenceList(nullptr); ResourceBroker::ResourceBroker() { // TODO Auto-generated constructor stub - if(s_presenceList.empty()) + if(s_presenceList == nullptr) { - s_presenceList = new std::list< DevicePresence * >(); + s_presenceList = std::unique_ptr>(new std::list); } } ResourceBroker::~ResourceBroker() { // TODO Auto-generated destructor stub - if(!s_presenceList.empty()) + if(s_presenceList != nullptr) { - s_presenceList.clear(); + s_presenceList->clear(); } - delete s_presenceList; } ResourceBroker * ResourceBroker::getInstance() @@ -60,10 +59,10 @@ ResourceBroker * ResourceBroker::getInstance() return s_instance; } -OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, BrokerCB cb) +OCStackResult ResourceBroker::hostResource(PrimitiveResourcePtr pResource, BrokerCB cb) { OCStackResult ret = OC_STACK_INVALID_PARAM; - if (pResource.getUri().empty() || pResource.getHost().empty()) + if (pResource->getUri().empty() || pResource->getHost().empty()) { return ret; } @@ -73,11 +72,11 @@ OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, Broker return ret; } - DevicePresence * presenceItem = findDevicePresence(pResource, cb); + DevicePresencePtr presenceItem = findDevicePresence(pResource, cb); if(presenceItem == NULL) { - DevicePresence *newItem = new DevicePresence(pResource, cb); - s_presenceList.push_back(newItem); + DevicePresencePtr newItem = DevicePresencePtr(new DevicePresence(pResource, cb)); + s_presenceList->push_back(newItem); } else { @@ -87,44 +86,43 @@ OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, Broker return ret; } -DevicePresence * ResourceBroker::findDevicePresence(PrimitiveResource& pResource, BrokerCB cb) +DevicePresencePtr ResourceBroker::findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb) { - DevicePresence * retDevice = NULL; - if (s_presenceList.empty() || pResource.isEmpty()) + DevicePresencePtr retDevice(nullptr); + if (s_presenceList->empty())// || pResource->isEmpty()) { - return NULL; + return retDevice; } else { - std::list::iterator it; + std::list::iterator it; - DevicePresence * temp = new DevicePresence(pResource, cb); - it = std::find(s_presenceList.begin(), s_presenceList.end(), temp); - delete temp; + DevicePresencePtr temp = DevicePresencePtr(new DevicePresence(pResource, cb)); + it = std::find(s_presenceList->begin(), s_presenceList->end(), temp); - if(it == s_presenceList.end()) + if(it == s_presenceList->end()) { - return NULL; + return retDevice; } else { - retDevice = it; + retDevice = *it; } } return retDevice; } -ResourcePresence * ResourceBroker::findResourcePresence(PrimitiveResource & pResource, BrokerCB cb) +ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb) { - ResourcePresence * retResource = NULL; - if (s_presenceList.empty() || pResource.isEmpty()) + ResourcePresencePtr retResource(nullptr); + if (s_presenceList->empty())// || pResource.isEmpty()) { - return NULL; + return retResource; } else { - DevicePresence * foundDevice = findDevicePresence(pResource, cb); + DevicePresencePtr foundDevice = findDevicePresence(pResource, cb); retResource = foundDevice->findResourcePresence(pResource, cb); } diff --git a/service/basis/resourceBroker/src/ResourcePresence.cpp b/service/basis/resourceBroker/src/ResourcePresence.cpp index 22ae25c..41a3260 100755 --- a/service/basis/resourceBroker/src/ResourcePresence.cpp +++ b/service/basis/resourceBroker/src/ResourcePresence.cpp @@ -20,33 +20,34 @@ #include "ResourcePresence.h" -ResourcePresence::ResourcePresence(PrimitiveResource & pResource, BrokerCB _cb) +ResourcePresence::ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) { primitiveResource = pResource; pGetCB = std::bind(&ResourcePresence::GetCB, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - requesterList = new std::list(); + requesterList + = std::unique_ptr>(new std::list); + addBrokerRequesterCB(_cb); } ResourcePresence::~ResourcePresence() { requesterList->clear(); - delete requesterList; } void ResourcePresence::addBrokerRequesterCB(BrokerCB _cb) { - BrokerRequesterInfo *newRequester = new BrokerRequesterInfo(); + BrokerRequesterInfoPtr newRequester = BrokerRequesterInfoPtr(new BrokerRequesterInfo()); newRequester->brockerCB = _cb; requesterList->push_back(newRequester); } void ResourcePresence::requestResourceState() { - primitiveResource.requestGet(pGetCB); + primitiveResource->requestGet(pGetCB); } void ResourcePresence::GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq) -- 2.7.4