From: jyong2.kim Date: Mon, 22 Jun 2015 04:19:57 +0000 (+0900) Subject: Update Broker architecture. X-Git-Tag: 1.2.0+RC1~1430^2~115 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c220dd7c644e25cc5c86d0607359b00cdc48bf66;p=platform%2Fupstream%2Fiotivity.git Update Broker architecture. Modify Architecture about Resource Presence managing by Broker directly instead of DevicePresence. Add Class DeviceAssociation that manage device handle. Delete unused function. Change-Id: I1c9e39d0388ba808169e1c763daba8a8943e3189 Signed-off-by: jyong2.kim Reviewed-on: https://gerrit.iotivity.org/gerrit/1372 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- diff --git a/service/basis/resourceBroker/SConscript b/service/basis/resourceBroker/SConscript index 4780137..40b26eb 100755 --- a/service/basis/resourceBroker/SConscript +++ b/service/basis/resourceBroker/SConscript @@ -58,9 +58,11 @@ if target_os == 'linux': ###################################################################### BROKER_SRC_DIR = 'src/' resourcebroker_src = [ - BROKER_SRC_DIR + 'ResourceBroker.cpp', + BROKER_SRC_DIR + 'DeviceAssociation.cpp', + BROKER_SRC_DIR + 'DevicePresence.cpp', BROKER_SRC_DIR + 'ResourcePresence.cpp', - BROKER_SRC_DIR + 'DevicePresence.cpp'] + BROKER_SRC_DIR + 'ResourceBroker.cpp' + ] if target_os in ['tizen','android'] : diff --git a/service/basis/resourceBroker/include/BrokerTypes.h b/service/basis/resourceBroker/include/BrokerTypes.h index e61c319..a49469c 100755 --- a/service/basis/resourceBroker/include/BrokerTypes.h +++ b/service/basis/resourceBroker/include/BrokerTypes.h @@ -32,28 +32,10 @@ #define BROKER_TAG PCF("BROKER") -#define BROKER_TRANSPORT OCConnectivityType::CT_IP_USE_V4 +#define BROKER_TRANSPORT OCConnectivityType::CT_ADAPTER_IP using namespace OIC::Service; -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::shared_ptr PrimitiveResourcePtr; -typedef std::shared_ptr BrokerRequesterInfoPtr; - -typedef std::shared_ptr ResourcePresencePtr; -typedef std::shared_ptr DevicePresencePtr; - /* * @BROKER_STATE * brief : resourcePresence state @@ -72,6 +54,7 @@ enum class BROKER_STATE DESTROYED, NONE }; + /* * @DEVICE_STATE * brief : devicePresence state @@ -86,11 +69,28 @@ enum class DEVICE_STATE LOST_SIGNAL }; +enum class BROKER_MODE +{ + DEVICE_PRESENCE_MODE = 0, + NON_PRESENCE_MODE +}; +typedef std::function BrokerCB; struct BrokerRequesterInfo { BrokerCB brockerCB; }; +typedef std::shared_ptr BrokerRequesterInfoPtr; + +class ResourcePresence; +class DevicePresence; + +typedef std::function)> FindCB; + +typedef std::shared_ptr PrimitiveResourcePtr; + +typedef std::shared_ptr ResourcePresencePtr; +typedef std::shared_ptr DevicePresencePtr; typedef OC::OCPlatform::OCPresenceHandle BasePresenceHandle; typedef std::function +#include +#include +#include +#include + +#include "BrokerTypes.h" + +class DeviceAssociation { +public: + + static DeviceAssociation * getInstance(); + + DevicePresencePtr findDevice(const std::string & address); + void addDevice(DevicePresencePtr dPresence); + void removeDevice(DevicePresencePtr dPresence); + +private: + DeviceAssociation(); + ~DeviceAssociation(); + + static DeviceAssociation * s_instance; + static std::mutex s_mutexForCreation; + static std::list< DevicePresencePtr > s_deviceList; +}; + +#endif /* DEVICEASSOCIATION_H_ */ diff --git a/service/basis/resourceBroker/include/DevicePresence.h b/service/basis/resourceBroker/include/DevicePresence.h index e17a445..495d01b 100755 --- a/service/basis/resourceBroker/include/DevicePresence.h +++ b/service/basis/resourceBroker/include/DevicePresence.h @@ -31,33 +31,27 @@ class DevicePresence { public: - DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); - - DevicePresence(); + DevicePresence(PrimitiveResourcePtr pResource); ~DevicePresence(); - void createDevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); - - void addPresenceResource(PrimitiveResourcePtr pResource, BrokerCB _cb); - ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); - ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource); + const std::string getAddress() const; + void addPresenceResource(ResourcePresence * rPresence); private: - SubscribeCallback pSubscribeRequestCB; - - std::unique_ptr> resourcePresenceList; + std::string address; + DEVICE_STATE state; + bool isWithinTime; + std::list resourcePresenceList; - BasePresenceHandle presenceHandle; - PresenceSubscriber presenceSubscriber; + SubscribeCallback pSubscribeRequestCB; TimeoutCallback pTimeoutCB; - DEVICE_STATE state; - const std::string address; + PresenceSubscriber presenceSubscriber; - void subscribeCB(OCStackResult ret,const unsigned int seq, const std::string& Hostaddress); void requestAllResourcePresence(); - bool isWithinTime; - void TimeOutCB(int msg); + + void subscribeCB(OCStackResult ret,const unsigned int seq, const std::string& Hostaddress); + void timeOutCB(int msg); }; diff --git a/service/basis/resourceBroker/include/ResourceBroker.h b/service/basis/resourceBroker/include/ResourceBroker.h index 6640970..0ca2281 100755 --- a/service/basis/resourceBroker/include/ResourceBroker.h +++ b/service/basis/resourceBroker/include/ResourceBroker.h @@ -29,7 +29,7 @@ #include #include "BrokerTypes.h" -#include "DevicePresence.h" +#include "ResourcePresence.h" class ResourceBroker { @@ -40,21 +40,15 @@ public: OCStackResult cancelHostResource(PrimitiveResourcePtr pResource); - BROKER_STATE getResourceState(PrimitiveResourcePtr pResource); - private: ResourceBroker(); ~ResourceBroker(); static ResourceBroker * s_instance; static std::mutex s_mutexForCreation; - static std::unique_ptr> s_presenceList; - - ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb); - DevicePresencePtr findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb); - + static std::unique_ptr> s_presenceList; ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource); diff --git a/service/basis/resourceBroker/include/ResourcePresence.h b/service/basis/resourceBroker/include/ResourcePresence.h index c8b4cbf..7ef6a5c 100755 --- a/service/basis/resourceBroker/include/ResourcePresence.h +++ b/service/basis/resourceBroker/include/ResourcePresence.h @@ -30,7 +30,7 @@ class ResourcePresence { public: - ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb); + ResourcePresence(PrimitiveResourcePtr pResource); ~ResourcePresence(); void addBrokerRequesterCB(BrokerCB _cb); @@ -44,18 +44,26 @@ public: void setResourcestate(BROKER_STATE _state); void executeAllBrokerCB(); + void changePresenceMode(BROKER_MODE newMode); + private: PrimitiveResourcePtr primitiveResource; std::unique_ptr> requesterList; BROKER_STATE state; + BROKER_MODE mode; + GetCallback pGetCB; - TimeoutCallback pTimeoutCB; void GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq); + + TimeoutCallback pTimeoutCB; + bool isWithinTime; void TimeOutCB(int msg); + void registerDevicePresence(); + }; #endif /* RESOURCEPRESENCE_H_ */ diff --git a/service/basis/resourceBroker/src/DeviceAssociation.cpp b/service/basis/resourceBroker/src/DeviceAssociation.cpp new file mode 100644 index 0000000..03757f3 --- /dev/null +++ b/service/basis/resourceBroker/src/DeviceAssociation.cpp @@ -0,0 +1,83 @@ +//****************************************************************** +// +// 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 "DeviceAssociation.h" +#include "DevicePresence.h" + +DeviceAssociation * DeviceAssociation::s_instance = nullptr; +std::mutex DeviceAssociation::s_mutexForCreation; +std::list< DevicePresencePtr > DeviceAssociation::s_deviceList; + +DeviceAssociation::DeviceAssociation() +{ + // TODO Auto-generated constructor stub + +} + +DeviceAssociation::~DeviceAssociation() +{ + // TODO Auto-generated destructor stub +} + +DeviceAssociation * DeviceAssociation::getInstance() +{ + if (!s_instance) + { + s_mutexForCreation.lock(); + if (!s_instance) + { + s_instance = new DeviceAssociation(); + } + s_mutexForCreation.unlock(); + } + return s_instance; +} + +DevicePresencePtr DeviceAssociation::findDevice(const std::string & address) +{ + DevicePresencePtr retDevice = nullptr; + for(auto it : s_deviceList) + { + if(address == it->getAddress()) + { + retDevice = it; + } + } + + return retDevice; +} + +void DeviceAssociation::addDevice(DevicePresencePtr dPresence) +{ + DevicePresencePtr foundDevice = findDevice(dPresence->getAddress()); + if(foundDevice == nullptr) + { + s_deviceList.push_back(dPresence); + } +} + +void DeviceAssociation::removeDevice(DevicePresencePtr dPresence) +{ + DevicePresencePtr foundDevice = findDevice(dPresence->getAddress()); + if(foundDevice != nullptr) + { + s_deviceList.remove(foundDevice); + } +} diff --git a/service/basis/resourceBroker/src/DevicePresence.cpp b/service/basis/resourceBroker/src/DevicePresence.cpp index f44bd65..dcec8ec 100755 --- a/service/basis/resourceBroker/src/DevicePresence.cpp +++ b/service/basis/resourceBroker/src/DevicePresence.cpp @@ -21,113 +21,51 @@ #include "DevicePresence.h" #include "PrimitiveException.h" -DevicePresence::DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) -{ - createDevicePresence(pResource, _cb); -} - -DevicePresence::DevicePresence() -{ -} - -DevicePresence::~DevicePresence() -{ - // TODO Auto-generated destructor stub - - resourcePresenceList->clear(); -} - -void DevicePresence::createDevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) +DevicePresence::DevicePresence(PrimitiveResourcePtr pResource) { pSubscribeRequestCB = std::bind(&DevicePresence::subscribeCB, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); + const char* log = pResource->getHost().c_str(); OC_LOG_V(DEBUG, BROKER_TAG, "%s",log); + try { presenceSubscriber = PresenceSubscriber(pResource->getHost(), BROKER_TRANSPORT, pSubscribeRequestCB); OC_LOG_V(DEBUG, BROKER_TAG, "subscribe Presence"); - } catch(PrimitiveException e) + } catch(PrimitiveException & e) { OC_LOG_V(DEBUG, BROKER_TAG, "exception in subscribe Presence %s",e.what()); } - resourcePresenceList - = std::unique_ptr>(new std::list); - addPresenceResource(pResource, _cb); state = DEVICE_STATE::REQUESTED; - pTimeoutCB = std::bind(&DevicePresence::TimeOutCB, this, - std::placeholders::_1); + pTimeoutCB = std::bind(&DevicePresence::timeOutCB, this, std::placeholders::_1); + + isWithinTime = true; //TODO generate Timer(if(!isTimer)) //register pTimeroutCB - this->isWithinTime = true; } -void DevicePresence::TimeOutCB(int msg) -{ - this->isWithinTime = false; - OC_LOG_V(DEBUG, BROKER_TAG, "Timeout execution. will be discard after receiving cb message"); - state = DEVICE_STATE::LOST_SIGNAL; -} -void DevicePresence::addPresenceResource(PrimitiveResourcePtr pResource, BrokerCB _cb) -{ - ResourcePresencePtr newPresenceResource = ResourcePresencePtr(new ResourcePresence(pResource, _cb)); - resourcePresenceList->push_back(newPresenceResource); +DevicePresence::~DevicePresence() +{ + resourcePresenceList.clear(); } -ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) +const std::string DevicePresence::getAddress() const { - ResourcePresencePtr retResource(nullptr); - - if (resourcePresenceList->empty())// || pResource.isEmpty()) - { - return retResource; - } - else - { - std::list::iterator it; - - ResourcePresencePtr temp = ResourcePresencePtr(new ResourcePresence(pResource, _cb)); - it = std::find(resourcePresenceList->begin(), resourcePresenceList->end(), temp); - if(it == resourcePresenceList->end()) - { - return retResource; - } - else - { - retResource = *it; - } - } - - return retResource; + return address; } -ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pResource) +void DevicePresence::addPresenceResource(ResourcePresence * rPresence) { - ResourcePresencePtr retResource(nullptr); - if (resourcePresenceList->empty())// || pResource.isEmpty()) - { - return retResource; - } - else - { - for(auto & it : * resourcePresenceList) - { - if(it->getPrimitiveResource() == pResource) - { - retResource = it; - } - } - } - return retResource; + resourcePresenceList.push_back(rPresence); } void DevicePresence::requestAllResourcePresence() { - std::list::iterator it; - for( auto & it : * resourcePresenceList) + for(auto it : resourcePresenceList) { it->requestResourceState(); } @@ -136,6 +74,7 @@ void DevicePresence::requestAllResourcePresence() void DevicePresence::subscribeCB(OCStackResult ret, const unsigned int seq, const std::string& hostAddress) { + std::cout << "Call Back Deivce's Presence\n"; const char* log = hostAddress.c_str(); OC_LOG_V(DEBUG, BROKER_TAG, "Received presence CB from: %s",log); OC_LOG_V(DEBUG, BROKER_TAG, "In subscribeCB: %d",ret); @@ -147,54 +86,60 @@ void DevicePresence::subscribeCB(OCStackResult ret, case OC_STACK_OK: case OC_STACK_RESOURCE_CREATED: case OC_STACK_CONTINUE: - OC_LOG_V(DEBUG, BROKER_TAG, "SEQ# %d",seq); state = DEVICE_STATE::ALIVE; - OC_LOG_V(DEBUG, BROKER_TAG, "device state : %d",(int)state); - if(!resourcePresenceList->empty()) + if(!resourcePresenceList.empty()) { requestAllResourcePresence(); } break; + case OC_STACK_INVALID_REQUEST_HANDLE: case OC_STACK_RESOURCE_DELETED: case OC_STACK_TIMEOUT: case OC_STACK_COMM_ERROR: //TODO get request state = DEVICE_STATE::REQUESTED; - if(!resourcePresenceList->empty()) + if(!resourcePresenceList.empty()) { OC_LOG_V(DEBUG, BROKER_TAG, "ready to execute requestAllResourcePresence()"); requestAllResourcePresence(); } break; + case OC_STACK_PRESENCE_STOPPED: case OC_STACK_PRESENCE_TIMEOUT: - OC_LOG_V(DEBUG, BROKER_TAG, "Server Presence Stop!!"); state = DEVICE_STATE::LOST_SIGNAL; - for(auto & it : * resourcePresenceList) - { - it->setResourcestate(BROKER_STATE::LOST_SIGNAL); - it->executeAllBrokerCB(); - } - + requestAllResourcePresence(); break; + case OC_STACK_PRESENCE_DO_NOT_HANDLE: OC_LOG_V(DEBUG, BROKER_TAG, "Presence Lost Signal because do not handled"); state = DEVICE_STATE::LOST_SIGNAL; + requestAllResourcePresence(); break; + default: + OC_LOG_V(DEBUG, BROKER_TAG, "Presence Lost Signal because unknown type"); state = DEVICE_STATE::LOST_SIGNAL; + requestAllResourcePresence(); break; } } else { - OC_LOG_V(DEBUG, BROKER_TAG, "its message is not available because of Timeout msg"); + OC_LOG_V(DEBUG, BROKER_TAG, "This response is Timeout but device steel alive"); this->state = DEVICE_STATE::ALIVE; //notify cb message to user. isWithinTime = true; } } + +void DevicePresence::timeOutCB(int msg) +{ + this->isWithinTime = false; + OC_LOG_V(DEBUG, BROKER_TAG, "Timeout execution. will be discard after receiving cb message"); + state = DEVICE_STATE::LOST_SIGNAL; +} diff --git a/service/basis/resourceBroker/src/ResourceBroker.cpp b/service/basis/resourceBroker/src/ResourceBroker.cpp index 07267b9..316acb4 100755 --- a/service/basis/resourceBroker/src/ResourceBroker.cpp +++ b/service/basis/resourceBroker/src/ResourceBroker.cpp @@ -26,14 +26,14 @@ ResourceBroker * ResourceBroker::s_instance = NULL; std::mutex ResourceBroker::s_mutexForCreation; -std::unique_ptr> ResourceBroker::s_presenceList(nullptr); +std::unique_ptr> ResourceBroker::s_presenceList(nullptr); ResourceBroker::ResourceBroker() { // TODO Auto-generated constructor stub if(s_presenceList == nullptr) { - s_presenceList = std::unique_ptr>(new std::list); + s_presenceList = std::unique_ptr>(new std::list); } } @@ -73,21 +73,18 @@ OCStackResult ResourceBroker::hostResource(PrimitiveResourcePtr pResource, Broke return ret; } - DevicePresencePtr presenceItem = findDevicePresence(pResource, cb); - + ResourcePresencePtr presenceItem = findResourcePresence(pResource); if(presenceItem == nullptr) { - OC_LOG_V(DEBUG, BROKER_TAG, "Not found any Handled Device."); - OC_LOG_V(DEBUG, BROKER_TAG, "Create New Device Presence Handler."); - - DevicePresencePtr newItem = DevicePresencePtr(new DevicePresence()); - newItem->createDevicePresence(pResource, cb); + OC_LOG_V(DEBUG, BROKER_TAG, "Not found any Handled Resource."); + OC_LOG_V(DEBUG, BROKER_TAG, "Create New Resource Presence Handler."); - s_presenceList->push_back(newItem); + presenceItem = ResourcePresencePtr(new ResourcePresence(pResource)); + s_presenceList->push_back(presenceItem); } else { - presenceItem->addPresenceResource(pResource, cb); + presenceItem->addBrokerRequesterCB(cb); } return ret; @@ -102,7 +99,7 @@ BROKER_STATE ResourceBroker::getResourceState(PrimitiveResourcePtr pResource) { BROKER_STATE retState = BROKER_STATE::NONE; - auto foundResource = findResourcePresence(pResource); + ResourcePresencePtr foundResource = findResourcePresence(pResource); if(foundResource != nullptr) { @@ -111,65 +108,19 @@ BROKER_STATE ResourceBroker::getResourceState(PrimitiveResourcePtr pResource) return retState; } - -DevicePresencePtr ResourceBroker::findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb) -{ - DevicePresencePtr retDevice(nullptr); - if (s_presenceList->empty())// || pResource->isEmpty()) - { - return retDevice; - } - else - { - std::list::iterator it; - - DevicePresencePtr temp = DevicePresencePtr(new DevicePresence(pResource, cb)); - it = std::find(s_presenceList->begin(), s_presenceList->end(), temp); - - if(it == s_presenceList->end()) - { - return retDevice; - } - else - { - retDevice = *it; - } - } - - return retDevice; -} - -ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb) -{ - ResourcePresencePtr retResource(nullptr); - if (s_presenceList->empty())// || pResource.isEmpty()) - { - return retResource; - } - else - { - DevicePresencePtr foundDevice = findDevicePresence(pResource, cb); - retResource = foundDevice->findResourcePresence(pResource, cb); - } - - return retResource; -} - ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pResource) { ResourcePresencePtr retResource(nullptr); - if (s_presenceList->empty())// || pResource->isEmpty()) - { - return retResource; - } - else + + if(s_presenceList->empty() != true) { for(auto & it : * s_presenceList) { - auto temp = it->findResourcePresence(pResource); - if(temp != nullptr) + PrimitiveResourcePtr temp = it->getPrimitiveResource(); + if(temp == pResource) { - retResource = temp; + retResource = it; + break; } } } diff --git a/service/basis/resourceBroker/src/ResourcePresence.cpp b/service/basis/resourceBroker/src/ResourcePresence.cpp index 8c56d8b..64e1561 100755 --- a/service/basis/resourceBroker/src/ResourcePresence.cpp +++ b/service/basis/resourceBroker/src/ResourcePresence.cpp @@ -19,8 +19,10 @@ //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #include "ResourcePresence.h" +#include "DeviceAssociation.h" +#include "DevicePresence.h" -ResourcePresence::ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) +ResourcePresence::ResourcePresence(PrimitiveResourcePtr pResource) { primitiveResource = pResource; @@ -28,13 +30,36 @@ ResourcePresence::ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb) std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); pTimeoutCB = std::bind(&ResourcePresence::TimeOutCB, this, std::placeholders::_1); + requesterList = std::unique_ptr>(new std::list); + //TODO generate Timer(if(!isTimer)) //register pTimeroutCB - addBrokerRequesterCB(_cb); + state = BROKER_STATE::REQUESTED; - this->isWithinTime = true; + isWithinTime = true; + + mode = BROKER_MODE::NON_PRESENCE_MODE; + primitiveResource->requestGet(pGetCB); + + registerDevicePresence(); +} + +void ResourcePresence::registerDevicePresence() +{ + // find device...... + std::string deviceAddress = primitiveResource->getHost(); + + DevicePresencePtr foundDevice + = DeviceAssociation::getInstance()->findDevice(deviceAddress); + + if(foundDevice == nullptr) + { + foundDevice = DevicePresencePtr(new DevicePresence(primitiveResource)); + DeviceAssociation::getInstance()->addDevice(foundDevice); + } + foundDevice->addPresenceResource(this); } ResourcePresence::~ResourcePresence() @@ -123,32 +148,12 @@ void ResourcePresence::GetCB(const HeaderOptions &hos, const ResponseStatement& { } + + if(mode == BROKER_MODE::NON_PRESENCE_MODE) + { + // TODO set timer & request get + } } -/* - * TODO : getCB logic is not fixed until now. below logic will be used forwarding task. - * - * // if(eCode == OC_STACK_OK) -// { - OC_LOG_V(DEBUG, BROKER_TAG, "broker state :: %d",(int)state); - state = BROKER_STATE::ALIVE; - OC_LOG_V(DEBUG, BROKER_TAG, "broker state changed :: %d",(int)state); - OC_LOG_V(DEBUG, BROKER_TAG, "GET request was successful"); -// std::cout << "[ResourcePresence]" << "Resource URI: " << rep.getUri() << std::endl; -// } -// else -// { -// std::cout << "[ResourcePresence]" << "onGET Response error: " << eCode << std::endl; - if(!requesterList->empty()) - { - executeAllBrokerCB(); - } - else - { - OC_LOG_V(DEBUG, BROKER_TAG, "None exist resource for request"); - state = BROKER_STATE::DESTROYED; - } -// } - */ PrimitiveResourcePtr ResourcePresence::getPrimitiveResource() { @@ -159,3 +164,15 @@ BROKER_STATE ResourcePresence::getResourceState() { return state; } + +void ResourcePresence::changePresenceMode(BROKER_MODE newMode) +{ + if(newMode != mode) + { + if(newMode == BROKER_MODE::NON_PRESENCE_MODE) + { + requestResourceState(); + } + mode = newMode; + } +}