From 646dac022dfd273d19e97a10b7fbfe954bc3a36d Mon Sep 17 00:00:00 2001 From: "jyong2.kim" Date: Wed, 3 Jun 2015 22:33:56 +0900 Subject: [PATCH] Update Broker latest skeleton code delete PrimitiveResource/DicoverHandler class. update broker's class name. remove naming "handler". Change-Id: Ib89384980562b5b4b5e24db0459fdd49a02411b3 Signed-off-by: jyong2.kim Reviewed-on: https://gerrit.iotivity.org/gerrit/1183 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- service/basis/resourceBroker/include/BrokerTypes.h | 62 ++++++ .../basis/resourceBroker/include/DevicePresence.h | 52 +++++ .../basis/resourceBroker/include/PresenceChecker.h | 22 -- .../basis/resourceBroker/include/PresenceInfo.h | 51 ----- .../resourceBroker/include/PrimitiveResource.h | 24 --- .../basis/resourceBroker/include/ResourceBroker.h | 71 +++---- .../resourceBroker/include/ResourcePresence.h | 56 +++++ .../basis/resourceBroker/src/DevicePresence.cpp | 82 ++++++++ .../basis/resourceBroker/src/PresenceChecker.cpp | 18 -- service/basis/resourceBroker/src/PresenceInfo.cpp | 48 ----- .../basis/resourceBroker/src/PrimitiveResource.cpp | 18 -- .../basis/resourceBroker/src/ResourceBroker.cpp | 234 ++++++++++----------- .../basis/resourceBroker/src/ResourcePresence.cpp | 55 +++++ 13 files changed, 449 insertions(+), 344 deletions(-) create mode 100755 service/basis/resourceBroker/include/BrokerTypes.h create mode 100755 service/basis/resourceBroker/include/DevicePresence.h delete mode 100755 service/basis/resourceBroker/include/PresenceChecker.h delete mode 100755 service/basis/resourceBroker/include/PresenceInfo.h delete mode 100755 service/basis/resourceBroker/include/PrimitiveResource.h create mode 100755 service/basis/resourceBroker/include/ResourcePresence.h create mode 100755 service/basis/resourceBroker/src/DevicePresence.cpp delete mode 100755 service/basis/resourceBroker/src/PresenceChecker.cpp delete mode 100755 service/basis/resourceBroker/src/PresenceInfo.cpp delete mode 100755 service/basis/resourceBroker/src/PrimitiveResource.cpp create mode 100755 service/basis/resourceBroker/src/ResourcePresence.cpp diff --git a/service/basis/resourceBroker/include/BrokerTypes.h b/service/basis/resourceBroker/include/BrokerTypes.h new file mode 100755 index 0000000..13cf464 --- /dev/null +++ b/service/basis/resourceBroker/include/BrokerTypes.h @@ -0,0 +1,62 @@ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#ifndef BROKERTYPES_H_ +#define BROKERTYPES_H_ + +#include +#include + +#include "OCPlatform.h" +#include "octypes.h" + +#include "PrimitiveResource.h" + +#define BROKER_TAG PCF("BROKER") +#define BASE_LAYER_C 0 +#define BROKER_TRANSPORT OCConnectivityType::OC_IPV4 + +typedef std::function)> FindCB; + +typedef std::function BrokerCB; + +typedef std::function resource)> DiscoverCB; + +enum class DISCOVER_TRANSACTION +{ + KEEP = 0, + DELETE +}; + +enum class BROKER_STATE +{ + ALIVE = 0, + REQUESTED, + LOST_SIGNAL, + DESTROYED +}; + +typedef OC::OCPlatform::OCPresenceHandle BasePresenceHandle; +typedef std::function SubscribeCallback; + +typedef std::function GetCallback; + +#endif // BROKERTYPES_H_ diff --git a/service/basis/resourceBroker/include/DevicePresence.h b/service/basis/resourceBroker/include/DevicePresence.h new file mode 100755 index 0000000..05c7882 --- /dev/null +++ b/service/basis/resourceBroker/include/DevicePresence.h @@ -0,0 +1,52 @@ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#ifndef DEVICEPRESENCE_H_ +#define DEVICEPRESENCE_H_ + +#include +#include + +#include "BrokerTypes.h" +#include "ResourcePresence.h" + +class DevicePresence +{ +public: + DevicePresence(PrimitiveResource & pResource, BrokerCB _cb); + ~DevicePresence(); + + DevicePresence * createPresenceHandler(PrimitiveResource & pResource, BrokerCB _cb); + + void addPresenceResource(PrimitiveResource & pResource, BrokerCB _cb); + ResourcePresence * findResourcePresence(PrimitiveResource & pResource, BrokerCB _cb); + +private: + + SubscribeCallback pSubscribeRequestCB; + std::list * presenceResourceList; + + BasePresenceHandle presenceHandle; + void subscribeCB(OCStackResult ret, const unsigned int seq, const std::string& msg); + + const std::string address; +}; + +#endif /* DEVICEPRESENCE_H_ */ diff --git a/service/basis/resourceBroker/include/PresenceChecker.h b/service/basis/resourceBroker/include/PresenceChecker.h deleted file mode 100755 index e824444..0000000 --- a/service/basis/resourceBroker/include/PresenceChecker.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * PresenceChecker.h - * - * Created on: May 20, 2015 - * Author: root - */ - -#ifndef PRESENCECHECKER_H_ -#define PRESENCECHECKER_H_ - -// Iotivity Base CAPI -#include "ocstack.h" -#include "logger.h" -class PresenceChecker { -public: - PresenceChecker(); - virtual ~PresenceChecker(); - OCStackResult addRequestCB(BrokerCB _cb); - OCStackResult deleteRequestCB(BrokerCB _cb); -}; - -#endif /* PRESENCECHECKER_H_ */ diff --git a/service/basis/resourceBroker/include/PresenceInfo.h b/service/basis/resourceBroker/include/PresenceInfo.h deleted file mode 100755 index eec3d71..0000000 --- a/service/basis/resourceBroker/include/PresenceInfo.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * PresenceInfo.h - * - */ - -#ifndef PRESENCEINFO_H_ -#define PRESENCEINFO_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Iotivity Base CAPI -#include "ocstack.h" -#include "logger.h" - -#include "PrimitiveResource.h" -#include "ResourceBroker.h" - -enum class BROKER_STATE; - -typedef std::function BrokerCB; -typedef std::function RequestCB; - -struct BrokerRequesterInfo { - BrokerCB brockerCB; -}; - -class PresenceInfo: public PrimitiveResource { -public: - PresenceInfo(PrimitiveResource & pResource, BrokerCB _cbrequesterList); - PresenceInfo(std::string _Uri, std::string _Address, BrokerCB _cb); - ~PresenceInfo(); - - const RequestCB pRequestCB; - const BrokerCB brokerCB; - - std::list * requesterList; -private: - OCStackApplicationResult requestCB(void * ctx, OCDoHandle handle, - OCClientResponse * clientResponse); -}; - -#endif /* PRESENCEINFO_H_ */ - diff --git a/service/basis/resourceBroker/include/PrimitiveResource.h b/service/basis/resourceBroker/include/PrimitiveResource.h deleted file mode 100755 index 108aba2..0000000 --- a/service/basis/resourceBroker/include/PrimitiveResource.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * PrimitiveResource.h - * - * Created on: May 20, 2015 - * Author: root - */ - -#ifndef PRIMITIVERESOURCE_H_ -#define PRIMITIVERESOURCE_H_ - -class PrimitiveResource { -public: - PrimitiveResource(); - PrimitiveResource(std::string _Uri, std::string _Address):Uri(_Uri), Address(_Address){} - ~PrimitiveResource(); - - const std::string getUri(); - const std::string getAddress(); - - const std::string Uri; - const std::string Address; -}; - -#endif /* PRIMITIVERESOURCE_H_ */ diff --git a/service/basis/resourceBroker/include/ResourceBroker.h b/service/basis/resourceBroker/include/ResourceBroker.h index 4ee3146..6af94f3 100755 --- a/service/basis/resourceBroker/include/ResourceBroker.h +++ b/service/basis/resourceBroker/include/ResourceBroker.h @@ -1,70 +1,57 @@ -/* - * ResourceBroker.h - * - * Created on: May 20, 2015 - * Author: root - */ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #ifndef RESOURCEBROKER_H_ #define RESOURCEBROKER_H_ -#include #include -#include -#include -#include -#include -#include #include +#include +#include #include -#include #include -#include - -// Iotivity Base CAPI -#include "ocstack.h" -#include "logger.h" - -// internal class -#include "PresenceInfo.h" -#define CACHE_TAG PCF("BROKER") +#include "BrokerTypes.h" +#include "DevicePresence.h" - -typedef std::function DiscoverCB; -enum class BROKER_STATE +class ResourceBroker { - ALIVE = 0, - REQUESTED, - LOST_SIGNAL, - DESTROYED -}; -class ResourceBroker { public: ResourceBroker * getInstance(); - OCStackResult discoverResource(PrimitiveResource & pResource, DiscoverCB cb); - OCStackResult discoverResource(const std::string uri, const std::string address, DiscoverCB cb); - OCStackResult hostResource(PrimitiveResource & pResource, BrokerCB cb); - OCStackResult hostResource( - const std::string Uri, const std::string address, BrokerCB cb); OCStackResult cancelHostResource(PrimitiveResource & pResource); - OCStackResult cancelHostResource( - const std::string uri, const std::string address); OCStackResult getResourceState(PrimitiveResource & pResource); - OCStackResult getResourceState( - const std::string address, const std::string uri); private: ResourceBroker(); ~ResourceBroker(); - bool isPrimitiveResource(PrimitiveResource& pResource, BrokerCB cb); + static ResourceBroker * s_instance; static std::mutex s_mutexForCreation; - static std::list< PresenceInfo * > s_presenceInfo; + static std::list< DevicePresence * > s_presenceList; + + ResourcePresence * findResourcePresence(PrimitiveResource& pResource, BrokerCB cb); + DevicePresence * findDevicePresence(PrimitiveResource& pResource, BrokerCB cb); }; #endif /* RESOURCEBROKER_H_ */ diff --git a/service/basis/resourceBroker/include/ResourcePresence.h b/service/basis/resourceBroker/include/ResourcePresence.h new file mode 100755 index 0000000..9d754f5 --- /dev/null +++ b/service/basis/resourceBroker/include/ResourcePresence.h @@ -0,0 +1,56 @@ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#ifndef RESOURCEPRESENCE_H_ +#define RESOURCEPRESENCE_H_ + +#include +#include + +#include "BrokerTypes.h" + +struct BrokerRequesterInfo +{ + BrokerCB brockerCB; +}; + +class ResourcePresence +{ +public: + ResourcePresence(PrimitiveResource & pResource, BrokerCB _cb); + ~ResourcePresence(); + + void addBrokerRequesterCB(BrokerCB _cb); + void removeBrokerRequesterCB(BrokerCB _cb); + void removeAllBrokerRequesterCB(); + + void requestResourceState(); + +private: + PrimitiveResource & primitiveResource; + + std::list * requesterList; + + GetCallback pGetCB; + void GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq); +}; + +#endif /* RESOURCEPRESENCE_H_ */ + diff --git a/service/basis/resourceBroker/src/DevicePresence.cpp b/service/basis/resourceBroker/src/DevicePresence.cpp new file mode 100755 index 0000000..aba8f32 --- /dev/null +++ b/service/basis/resourceBroker/src/DevicePresence.cpp @@ -0,0 +1,82 @@ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include "DevicePresence.h" + +DevicePresence::DevicePresence(PrimitiveResource & 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(); + addPresenceResource(pResource, _cb); + + OC::OCPlatform::subscribePresence(presenceHandle, address, + BROKER_TRANSPORT, pSubscribeRequestCB); +} + +DevicePresence::~DevicePresence() +{ + // TODO Auto-generated destructor stub + OC::OCPlatform::unsubscribePresence(presenceHandle); + presenceResourceList->clear(); + delete presenceResourceList; +} + +void DevicePresence::addPresenceResource(PrimitiveResource & pResource, BrokerCB _cb) +{ + ResourcePresence * newPresenceResource = new ResourcePresence(pResource, _cb); + presenceResourceList->push_back(newPresenceResource); +} + +ResourcePresence * DevicePresence::findPresenceResource(PrimitiveResource & pResource, BrokerCB _cb) +{ + ResourcePresence * retResource = NULL; + if (presenceResourceList->empty() || pResource.isEmpty()) + { + return NULL; + } + else + { + std::list::iterator it; + + ResourcePresence * temp = new ResourcePresence(pResource, _cb); + it = std::find(presenceResourceList->begin(), presenceResourceList->end(), temp); + delete temp; + + if(it == presenceResourceList->end()) + { + return NULL; + } + else + { + retResource = it; + } + } + + return retResource; +} + +void DevicePresence::subscribeCB(OCStackResult ret, + const unsigned int seq, const std::string& msg) +{ + +} diff --git a/service/basis/resourceBroker/src/PresenceChecker.cpp b/service/basis/resourceBroker/src/PresenceChecker.cpp deleted file mode 100755 index 6b07ab0..0000000 --- a/service/basis/resourceBroker/src/PresenceChecker.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - * PresenceChecker.cpp - * - * Created on: May 20, 2015 - * Author: root - */ - -#include "PresenceChecker.h" - -PresenceChecker::PresenceChecker() { - // TODO Auto-generated constructor stub - -} - -PresenceChecker::~PresenceChecker() { - // TODO Auto-generated destructor stub -} - diff --git a/service/basis/resourceBroker/src/PresenceInfo.cpp b/service/basis/resourceBroker/src/PresenceInfo.cpp deleted file mode 100755 index 40be10b..0000000 --- a/service/basis/resourceBroker/src/PresenceInfo.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * PresenceInfo.cpp - * - */ - -#include "PresenceInfo.h" - -PresenceInfo::PresenceInfo(PrimitiveResource & pResource, BrokerCB _cb) : - Uri(pResource.getUri()), Address(pResource.getAddress()) { - pRequestCB =(RequestCB) (std::bind(&PresenceInfo::requestCB, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - requesterList = new std::list(); - BrokerRequesterInfo *requester = new BrokerRequesterInfo(); - requester->brockerCB = _cb; - requesterList.push_back(requester); -} - -PresenceInfo::PresenceInfo(std::string _Uri, std::string _Address, BrokerCB _cb) : - Uri(_Uri), Address(_Address) { - pRequestCB =(RequestCB) (std::bind(&PresenceInfo::requestCB, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - requesterList = new std::list(); - BrokerRequesterInfo *requester = new BrokerRequesterInfo(); - requester->brockerCB = _cb; - requesterList.push_back(requester); -} - -PresenceInfo::~PresenceInfo() { - // TODO Auto-generated destructor stub - // delete requester all -// auto it = requesterList->begin(); - - requesterList->clear(); - delete requesterList; -} - -OCStackApplicationResult PresenceInfo::requestCB(void * ctx, OCDoHandle handle, - OCClientResponse * clientResponse) { - OCStackApplicationResult ret = OC_STACK_DELETE_TRANSACTION; - - return ret; -} - -OCStackResult PresenceInfo::addRequestCB(BrokerCB _cb) { - OCStackResult ret = OC_STACK_ERROR; - - requesterList->push_back(_cb); - - return ret; -} diff --git a/service/basis/resourceBroker/src/PrimitiveResource.cpp b/service/basis/resourceBroker/src/PrimitiveResource.cpp deleted file mode 100755 index 68b0a8a..0000000 --- a/service/basis/resourceBroker/src/PrimitiveResource.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - * PrimitiveResource.cpp - * - * Created on: May 20, 2015 - * Author: root - */ - -#include "PrimitiveResource.h" - -PrimitiveResource::PrimitiveResource() { - // TODO Auto-generated constructor stub - -} - -PrimitiveResource::~PrimitiveResource() { - // TODO Auto-generated destructor stub -} - diff --git a/service/basis/resourceBroker/src/ResourceBroker.cpp b/service/basis/resourceBroker/src/ResourceBroker.cpp index 7d35fc1..9a7822c 100755 --- a/service/basis/resourceBroker/src/ResourceBroker.cpp +++ b/service/basis/resourceBroker/src/ResourceBroker.cpp @@ -1,140 +1,132 @@ -/* - * ResourceBroker.cpp - * - */ - +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include "BrokerTypes.h" #include "ResourceBroker.h" #define OIC_COAP "coap://" #define DEFAULT_CONTEXT_VALUE 0x99 -typedef std::function FindCB; - -ResourceBroker * ResourceBroker::s_instance = null; +ResourceBroker * ResourceBroker::s_instance = NULL; +std::list< DevicePresence * > ResourceBroker::s_presenceList = NULL; -class DiscoverResource: public PrimitiveResource { -public: - DiscoverResource(); - DiscoverResource(PrimitiveResource & pResource, DiscoverCB _cb) : - Uri(pResource.getUri()), Address(pResource.getAddress()), discovercb(_cb) { - pFindCB = (FindCB)(std::bind(&DiscoverResource::findCB,this,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - } - DiscoverResource(std::string _Uri, std::string _Address, DiscoverCB _cb) : - Uri(_Uri), Address(_Address), discovercb(_cb) { - pFindCB = (FindCB)(std::bind(&DiscoverResource::findCB, this,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); +ResourceBroker::ResourceBroker() +{ + // TODO Auto-generated constructor stub + if(s_presenceList.empty()) + { + s_presenceList = new std::list< DevicePresence * >(); + } +} + +ResourceBroker::~ResourceBroker() +{ + // TODO Auto-generated destructor stub + if(!s_presenceList.empty()) + { + s_presenceList.clear(); + } + delete s_presenceList; +} + +ResourceBroker * ResourceBroker::getInstance() +{ + if (!s_instance) + { + s_mutexForCreation.lock(); + if (!s_instance) + { + s_instance = new ResourceBroker(); } - ~DiscoverResource(); - const DiscoverCB discovercb; - const FindCB pFindCB; - -private: - OCStackApplicationResult findCB(void * ctx, OCDoHandle handle,OCClientResponse * clientResponse) + s_mutexForCreation.unlock(); + } + return s_instance; +} + +OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, BrokerCB cb) +{ + OCStackResult ret = OC_STACK_INVALID_PARAM; + if (pResource.getUri().empty() || pResource.getHost().empty()) { - OCStackApplicationResult ret = OC_STACK_DELETE_TRANSACTION; - // parse about resource info - - // create primitiveResource - PrimitiveResource * retResource = new PrimitiveResource(this->Uri, this->Address); - // callback - this->discovercb(retResource); - //why using auto_ptr? - std::auto_ptr bye_bye(this); - ///////////////////////////////////////////////////////////////////////////// - std::cout << "Is Possible?? : " << this->getAddress() << std::endl; - ///////////////////////////////////////////////////////////////////////////// return ret; - } -}; - - ResourceBroker::ResourceBroker() { - // TODO Auto-generated constructor stub - - } - - ResourceBroker::~ResourceBroker() { - // TODO Auto-generated destructor stub - } - - ResourceBroker * ResourceBroker::getInstance() { - if (!s_instance) { - s_mutexForCreation.lock(); - if (!s_instance) { - s_instance = new ResourceBroker(); - } - s_mutexForCreation.unlock(); - } - return s_instance; - } + } + if (cb == NULL) + { + ret = OC_STACK_INVALID_CALLBACK; + return ret; + } - OCStackResult ResourceBroker::discoverResource(const std::string _uri, - const std::string _address, DiscoverCB _cb) { - OCStackResult ret = OC_STACK_INVALID_PARAM; + DevicePresence * presenceItem = findDevicePresence(pResource, cb); + if(presenceItem == NULL) + { + DevicePresence *newItem = new DevicePresence(pResource, cb); + s_presenceList.push_back(newItem); + } + else + { + presenceItem->addPresenceResource(pResource, cb); + } - if (_uri.empty() || _address.empty()) { - return ret; - } - if (!_cb) { - ret = OC_STACK_INVALID_CALLBACK; - return ret; - } + return ret; +} - DiscoverResource * dResource = new DiscoverResource(_uri, _address, _cb); - OCDoHandle handle; - OCCallbackData cbData; - std::string fullAddress = OIC_COAP + _address; +DevicePresence * ResourceBroker::findDevicePresence(PrimitiveResource& pResource, BrokerCB cb) +{ + DevicePresence * retDevice = NULL; + if (s_presenceList.empty() || pResource.isEmpty()) + { + return NULL; + } + else + { + std::list::iterator it; - cbData.cb = dResource->pFindCB; - cbData.context = (void *) DEFAULT_CONTEXT_VALUE; - cbData.cd = NULL; + DevicePresence * temp = new DevicePresence(pResource, cb); + it = std::find(s_presenceList.begin(), s_presenceList.end(), temp); + delete temp; - return OCDoResource(&handle, OC_REST_GET, fullAddress.c_str(), _uri.c_str(), 0, OC_ALL, - OC_LOW_QOS, &cbData, NULL, 0); + if(it == s_presenceList.end()) + { + return NULL; } - - OCStackResult ResourceBroker::discoverResource(PrimitiveResource & pResource, - DiscoverCB _cb) { - return this->discoverResource(pResource.getUri(), pResource.getAddress(), _cb); + else + { + retDevice = it; } + } - OCStackResult ResourceBroker::hostResource(const std::string _uri,const std::string _address, BrokerCB _cb) - { - OCStackResult ret = OC_STACK_INVALID_PARAM; - if (uri.empty() || address.empty()) { - return ret; - } - if (!cb) { - ret = OC_STACK_INVALID_CALLBACK; - return ret; - } + return retDevice; +} - return ret; - } - OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, BrokerCB cb) - { - OCStackResult ret = OC_STACK_INVALID_PARAM; - if (pResource.getUri().empty() || pResource.getAddress().empty()) { - return ret; - } - if (!cb) { - ret = OC_STACK_INVALID_CALLBACK; - return ret; - } +ResourcePresence * ResourceBroker::findResourcePresence(PrimitiveResource & pResource, BrokerCB cb) +{ + ResourcePresence * retResource = NULL; + if (s_presenceList.empty() || pResource.isEmpty()) + { + return NULL; + } + else + { + DevicePresence * foundDevice = findDevicePresence(pResource, cb); + retResource = foundDevice->findResourcePresence(pResource, cb); + } - return ret; - } - bool ResourceBroker::isPrimitiveResource(PrimitiveResource& pResource, BrokerCB cb) - { - if(s_presenceInfo.empty()) - return false; - else - { - std::list::iterator it; - PresenceInfo item = new PresenceInfo(pResource.getUri(), pResource.getAddress(), cb); - item.PrimitiveResource(pResource.getUri(),pResource.getAddress()); - it = std::find(s_presenceInfo.begin(),s_presenceInfo.end(),item); - if(it==s_presenceInfo.end()) - return false; - else - return true; - } - } + return retResource; +} diff --git a/service/basis/resourceBroker/src/ResourcePresence.cpp b/service/basis/resourceBroker/src/ResourcePresence.cpp new file mode 100755 index 0000000..22ae25c --- /dev/null +++ b/service/basis/resourceBroker/src/ResourcePresence.cpp @@ -0,0 +1,55 @@ +//****************************************************************** +// +// 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include "ResourcePresence.h" + +ResourcePresence::ResourcePresence(PrimitiveResource & pResource, BrokerCB _cb) +{ + primitiveResource = pResource; + + pGetCB = std::bind(&ResourcePresence::GetCB, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); + + requesterList = new std::list(); + addBrokerRequesterCB(_cb); +} + +ResourcePresence::~ResourcePresence() +{ + requesterList->clear(); + delete requesterList; +} + +void ResourcePresence::addBrokerRequesterCB(BrokerCB _cb) +{ + BrokerRequesterInfo *newRequester = new BrokerRequesterInfo(); + newRequester->brockerCB = _cb; + requesterList->push_back(newRequester); +} + +void ResourcePresence::requestResourceState() +{ + primitiveResource.requestGet(pGetCB); +} + +void ResourcePresence::GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq) +{ + +} -- 2.7.4