Add Control Presence Callback
authordoil.kwon <doil.kwon@samsung.com>
Mon, 15 Jun 2015 10:57:36 +0000 (19:57 +0900)
committerUze Choi <uzchoi@samsung.com>
Wed, 17 Jun 2015 08:40:40 +0000 (08:40 +0000)
Add Device/Resource Presence Check
Add Log Message using OC_LOG
Fix Merge Conflict File(Sconscript)
Add description about enum class in BrokerTypes.h
Delete  the meaningless blank
Add Timer Logic
(is not fixed until now,after finishing timer class,will be fixed)
Fix the issues about Patch set4's comments

Change-Id: I5eb87f4da751a54f5224c0d0b14ddedccb7d53f6
Signed-off-by: doil.kwon <doil.kwon@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1275
Reviewed-by: Hun-je Yeon <hunje.yeon@samsung.com>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/basis/resourceBroker/SConscript [changed mode: 0644->0755]
service/basis/resourceBroker/include/BrokerTypes.h
service/basis/resourceBroker/include/DevicePresence.h
service/basis/resourceBroker/include/ResourceBroker.h
service/basis/resourceBroker/include/ResourcePresence.h
service/basis/resourceBroker/src/DevicePresence.cpp
service/basis/resourceBroker/src/ResourceBroker.cpp
service/basis/resourceBroker/src/ResourcePresence.cpp

old mode 100644 (file)
new mode 100755 (executable)
index b9169ac..b71f220
@@ -43,24 +43,25 @@ target_os = env.get('TARGET_OS')
 ######################################################################
 resourcebroker_env.AppendUnique(CPPPATH = ['include'])
 resourcebroker_env.AppendUnique(CPPPATH = ['../common/primitiveResource/include'])
-resourcebroker_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'libcoap'])
+resourcebroker_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+resourcebroker_env.PrependUnique(LIBS = ['ServiceCommon','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'])
+    resourcebroker_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-fmessage-length=0', '-std=c++0x'])
 
 if target_os == 'linux':
-       resourcebroker_env.AppendUnique(LIBS = ['pthread'])
+    resourcebroker_env.AppendUnique(LIBS = ['pthread'])
 
 ######################################################################
 # Source files and Targets
 ######################################################################
-CACHE_SRC_DIR = 'src/'
+BROKER_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']
+        BROKER_SRC_DIR + 'ResourceBroker.cpp',
+        BROKER_SRC_DIR + 'ResourcePresence.cpp',
+        BROKER_SRC_DIR + 'DevicePresence.cpp']
+
 
 if target_os in ['tizen','android'] :
     resourcebrokersdk = resourcebroker_env.SharedLibrary('ResourceBroker', resourcebroker_src)
@@ -70,5 +71,6 @@ else :
 resourcebroker_env.InstallTarget(resourcebrokersdk, 'libResouceBroker')
 
 # Go to build sample apps
-#SConscript('SampleApp/SConscript')
+SConscript('SampleApp/SConscript')
+
 
index c8c624d..625510b 100755 (executable)
 
 #include "OCPlatform.h"
 #include "octypes.h"
+#include "logger.h"
 
 #include "PrimitiveResource.h"
 
 #define BROKER_TAG PCF("BROKER")
+
 #define BROKER_TRANSPORT OCConnectivityType::OC_IPV4
 
+
 struct BrokerRequesterInfo;
 class ResourcePresence;
 class DevicePresence;
@@ -50,19 +53,38 @@ typedef std::shared_ptr<BrokerRequesterInfo> BrokerRequesterInfoPtr;
 typedef std::shared_ptr<ResourcePresence> ResourcePresencePtr;
 typedef std::shared_ptr<DevicePresence> DevicePresencePtr;
 
-enum class DISCOVER_TRANSACTION
-{
-    KEEP = 0,
-    DELETE
-};
-
+/*
+ * @BROKER_STATE
+ * brief : resourcePresence state
+ * ALIVE       - It means that 'getCB' function receives 'OK' message
+ * REQUESTED   - It means that broker receives the request for presence checking
+ * LOST_SIGNAL - In case that 'getCB' function receives the message except 'OK'
+ * DESTROYED   - In case that the presence checking is dismissed for the resource ,
+ *               or there is no matched value in the Broker Callback list
+ * NONE        - To be determined.
+ */
 enum class BROKER_STATE
 {
     ALIVE = 0,
     REQUESTED,
     LOST_SIGNAL,
-    DESTROYED
+    DESTROYED,
+    NONE
 };
+/*
+ * @DEVICE_STATE
+ * brief : devicePresence state
+ * ALIVE       - It means that 'subscribeCB' function receives 'OK' message
+ * REQUESTED   - It means that broker receives the request for presence checking
+ * LOST_SIGNAL - In case that 'subscribeCB' function receives the message except 'OK'
+ */
+enum class DEVICE_STATE
+{
+    ALIVE = 0,
+    REQUESTED,
+    LOST_SIGNAL
+};
+
 
 struct BrokerRequesterInfo
 {
@@ -74,5 +96,6 @@ typedef std::function<void(OCStackResult, const unsigned int,
         const std::string&)> SubscribeCallback;
 
 typedef std::function<void(const HeaderOptions&, const ResponseStatement&, int)> GetCallback;
+typedef std::function<void(int)> TimeoutCallback;
 
 #endif // BROKERTYPES_H_
index 1d57f99..e17a445 100755 (executable)
 
 #include "BrokerTypes.h"
 #include "ResourcePresence.h"
+#include "PresenceSubscriber.h"
 
 class DevicePresence
 {
 public:
     DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb);
+
+    DevicePresence();
     ~DevicePresence();
 
+    void createDevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb);
+
     void addPresenceResource(PrimitiveResourcePtr pResource, BrokerCB _cb);
     ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb);
+    ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource);
 
 private:
-
     SubscribeCallback pSubscribeRequestCB;
-    std::unique_ptr<std::list<ResourcePresencePtr>> presenceResourceList;
 
-    BasePresenceHandle presenceHandle;
-    void subscribeCB(OCStackResult ret, const unsigned int seq, const std::string& msg);
+    std::unique_ptr<std::list<ResourcePresencePtr>> resourcePresenceList;
 
+
+    BasePresenceHandle presenceHandle;
+    PresenceSubscriber presenceSubscriber;
+    TimeoutCallback pTimeoutCB;
+    DEVICE_STATE state;
     const std::string address;
+
+    void subscribeCB(OCStackResult ret,const unsigned int seq, const std::string& Hostaddress);
+    void requestAllResourcePresence();
+    bool isWithinTime;
+    void TimeOutCB(int msg);
+
 };
 
 #endif /* DEVICEPRESENCE_H_ */
index f0b70a7..6640970 100755 (executable)
 class ResourceBroker
 {
 public:
-    ResourceBroker * getInstance();
+    static ResourceBroker * getInstance();
 
     OCStackResult hostResource(PrimitiveResourcePtr pResource, BrokerCB cb);
 
     OCStackResult cancelHostResource(PrimitiveResourcePtr pResource);
 
-    OCStackResult getResourceState(PrimitiveResourcePtr pResource);
+
+    BROKER_STATE getResourceState(PrimitiveResourcePtr pResource);
+
 
 private:
     ResourceBroker();
@@ -52,6 +54,10 @@ private:
 
     ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb);
     DevicePresencePtr findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb);
+
+
+    ResourcePresencePtr findResourcePresence(PrimitiveResourcePtr pResource);
+
 };
 
 #endif /* RESOURCEBROKER_H_ */
index 47bf8ea..c8b4cbf 100755 (executable)
@@ -39,13 +39,23 @@ public:
 
     void requestResourceState();
 
+    PrimitiveResourcePtr getPrimitiveResource();
+    BROKER_STATE getResourceState();
+    void setResourcestate(BROKER_STATE _state);
+    void executeAllBrokerCB();
+
 private:
     PrimitiveResourcePtr primitiveResource;
 
     std::unique_ptr<std::list<BrokerRequesterInfoPtr>> requesterList;
 
+    BROKER_STATE state;
     GetCallback pGetCB;
+    TimeoutCallback pTimeoutCB;
     void GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq);
+    bool isWithinTime;
+    void TimeOutCB(int msg);
+
 };
 
 #endif /* RESOURCEPRESENCE_H_ */
index 28b9e77..f44bd65 100755 (executable)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 #include "DevicePresence.h"
+#include "PrimitiveException.h"
 
 DevicePresence::DevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb)
 {
-    pSubscribeRequestCB = std::bind(&DevicePresence::subscribeCB, this,
-            std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
-
-    presenceResourceList
-    = std::unique_ptr<std::list<ResourcePresencePtr>>(new std::list<ResourcePresencePtr>);
-    addPresenceResource(pResource, _cb);
+    createDevicePresence(pResource, _cb);
+}
 
-    OC::OCPlatform::subscribePresence(presenceHandle, pResource->getHost(),
-            BROKER_TRANSPORT, pSubscribeRequestCB);
+DevicePresence::DevicePresence()
+{
 }
 
 DevicePresence::~DevicePresence()
 {
     // TODO Auto-generated destructor stub
-    OC::OCPlatform::unsubscribePresence(presenceHandle);
-    presenceResourceList->clear();
+
+    resourcePresenceList->clear();
 }
 
+void DevicePresence::createDevicePresence(PrimitiveResourcePtr pResource, BrokerCB _cb)
+{
+    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)
+    {
+        OC_LOG_V(DEBUG, BROKER_TAG, "exception in subscribe Presence %s",e.what());
+    }
+    resourcePresenceList
+    = std::unique_ptr<std::list<ResourcePresencePtr>>(new std::list<ResourcePresencePtr>);
+
+    addPresenceResource(pResource, _cb);
+    state = DEVICE_STATE::REQUESTED;
+    pTimeoutCB = std::bind(&DevicePresence::TimeOutCB, this,
+                std::placeholders::_1);
+    //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));
-    presenceResourceList->push_back(newPresenceResource);
+    resourcePresenceList->push_back(newPresenceResource);
+
 }
 
 ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb)
 {
     ResourcePresencePtr retResource(nullptr);
-    if (presenceResourceList->empty())// || pResource.isEmpty())
+
+    if (resourcePresenceList->empty())// || pResource.isEmpty())
     {
        return retResource;
     }
@@ -58,9 +90,8 @@ ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pR
        std::list<ResourcePresencePtr>::iterator it;
 
        ResourcePresencePtr temp = ResourcePresencePtr(new ResourcePresence(pResource, _cb));
-       it = std::find(presenceResourceList->begin(), presenceResourceList->end(), temp);
-
-       if(it == presenceResourceList->end())
+       it = std::find(resourcePresenceList->begin(), resourcePresenceList->end(), temp);
+       if(it == resourcePresenceList->end())
        {
            return retResource;
        }
@@ -73,8 +104,97 @@ ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pR
     return retResource;
 }
 
+ResourcePresencePtr DevicePresence::findResourcePresence(PrimitiveResourcePtr pResource)
+{
+    ResourcePresencePtr retResource(nullptr);
+    if (resourcePresenceList->empty())// || pResource.isEmpty())
+    {
+       return retResource;
+    }
+    else
+    {
+        for(auto & it : * resourcePresenceList)
+        {
+            if(it->getPrimitiveResource() == pResource)
+            {
+                retResource = it;
+            }
+        }
+    }
+    return retResource;
+}
+
+void DevicePresence::requestAllResourcePresence()
+{
+    std::list<ResourcePresencePtr>::iterator it;
+    for( auto & it : * resourcePresenceList)
+    {
+        it->requestResourceState();
+    }
+}
+
 void DevicePresence::subscribeCB(OCStackResult ret,
-        const unsigned int seq, const std::string& msg)
+        const unsigned int seq, const std::string& hostAddress)
 {
+    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);
+    //TODO : cancel timer if(isTimer)
+    if(isWithinTime)
+    {
+        switch(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())
+                {
+                    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())
+                {
+                    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();
+                }
+
+                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;
+                break;
+            default:
+                state = DEVICE_STATE::LOST_SIGNAL;
+                break;
+        }
+    }
+    else
+    {
+        OC_LOG_V(DEBUG, BROKER_TAG, "its message is not available because of Timeout msg");
+        this->state = DEVICE_STATE::ALIVE;
+        //notify cb message to user.
+        isWithinTime = true;
+    }
 }
index 8ec9f3a..07267b9 100755 (executable)
@@ -25,6 +25,7 @@
 #define DEFAULT_CONTEXT_VALUE 0x99
 
 ResourceBroker * ResourceBroker::s_instance = NULL;
+std::mutex ResourceBroker::s_mutexForCreation;
 std::unique_ptr<std::list< DevicePresencePtr >>  ResourceBroker::s_presenceList(nullptr);
 
 ResourceBroker::ResourceBroker()
@@ -73,9 +74,15 @@ OCStackResult ResourceBroker::hostResource(PrimitiveResourcePtr pResource, Broke
     }
 
     DevicePresencePtr presenceItem = findDevicePresence(pResource, cb);
-    if(presenceItem == NULL)
+
+    if(presenceItem == nullptr)
     {
-        DevicePresencePtr newItem = DevicePresencePtr(new DevicePresence(pResource, cb));
+        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);
+
         s_presenceList->push_back(newItem);
     }
     else
@@ -86,6 +93,25 @@ OCStackResult ResourceBroker::hostResource(PrimitiveResourcePtr pResource, Broke
     return ret;
 }
 
+OCStackResult ResourceBroker::cancelHostResource(PrimitiveResourcePtr pResource)
+{
+    return OC_STACK_OK;
+}
+
+BROKER_STATE ResourceBroker::getResourceState(PrimitiveResourcePtr pResource)
+{
+    BROKER_STATE retState = BROKER_STATE::NONE;
+
+    auto foundResource = findResourcePresence(pResource);
+
+    if(foundResource != nullptr)
+    {
+        retState = foundResource->getResourceState();
+    }
+    return retState;
+}
+
+
 DevicePresencePtr ResourceBroker::findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb)
 {
     DevicePresencePtr retDevice(nullptr);
@@ -128,3 +154,25 @@ ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pR
 
     return retResource;
 }
+
+ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pResource)
+{
+    ResourcePresencePtr retResource(nullptr);
+    if (s_presenceList->empty())// || pResource->isEmpty())
+    {
+        return retResource;
+    }
+    else
+    {
+        for(auto & it : * s_presenceList)
+        {
+            auto temp = it->findResourcePresence(pResource);
+            if(temp != nullptr)
+            {
+                retResource = temp;
+            }
+        }
+    }
+
+    return retResource;
+}
index 41a3260..8c56d8b 100755 (executable)
@@ -26,16 +26,22 @@ ResourcePresence::ResourcePresence(PrimitiveResourcePtr pResource, BrokerCB _cb)
 
     pGetCB = std::bind(&ResourcePresence::GetCB, this,
             std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
-
+    pTimeoutCB = std::bind(&ResourcePresence::TimeOutCB, this,
+            std::placeholders::_1);
     requesterList
     = std::unique_ptr<std::list<BrokerRequesterInfoPtr>>(new std::list<BrokerRequesterInfoPtr>);
-
+    //TODO generate Timer(if(!isTimer))
+    //register pTimeroutCB
     addBrokerRequesterCB(_cb);
+    state = BROKER_STATE::REQUESTED;
+    this->isWithinTime = true;
 }
 
 ResourcePresence::~ResourcePresence()
 {
     requesterList->clear();
+
+    state = BROKER_STATE::DESTROYED;
 }
 
 void ResourcePresence::addBrokerRequesterCB(BrokerCB _cb)
@@ -48,9 +54,108 @@ void ResourcePresence::addBrokerRequesterCB(BrokerCB _cb)
 void ResourcePresence::requestResourceState()
 {
     primitiveResource->requestGet(pGetCB);
+
+}
+void ResourcePresence::executeAllBrokerCB()
+{
+    OC_LOG_V(DEBUG, BROKER_TAG, "executeAllBrokerCB()");
+    for(BrokerRequesterInfoPtr & item : * requesterList)
+    {
+        item->brockerCB(this->state);
+    }
 }
+void ResourcePresence::setResourcestate(BROKER_STATE _state)
+{
+    this->state = _state;
+
+}
+void ResourcePresence::TimeOutCB(int msg)
+{
+    this->isWithinTime = false;
+    OC_LOG_V(DEBUG, BROKER_TAG, "Timeout execution. will be discard after receiving cb message");
+    this->state = BROKER_STATE::LOST_SIGNAL;
 
+}
 void ResourcePresence::GetCB(const HeaderOptions &hos, const ResponseStatement& rep, int seq)
 {
+    try
+    {
+        //TODO : cancel timer if(isTimer)
+        if(isWithinTime)
+        {
+
+            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");
+
+            if(!requesterList->empty())
+            {
+                executeAllBrokerCB();
+            }
+            else
+            {
+                OC_LOG_V(DEBUG, BROKER_TAG, "None exist resource for request");
+                state = BROKER_STATE::DESTROYED;
+            }
+        }
+        else
+        {
+            OC_LOG_V(DEBUG, BROKER_TAG, "its message is not available because of Timeout msg");
+            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");
+            //notify cb message to user.
+            if(!requesterList->empty())
+            {
+                executeAllBrokerCB();
+            }
+            else
+            {
+                OC_LOG_V(DEBUG, BROKER_TAG, "None exist resource for request");
+                state = BROKER_STATE::DESTROYED;
+            }
+            isWithinTime = true;
+        }
+    }
+    catch(std::exception& e)
+    {
+
+    }
+}
+/*
+ * 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()
+{
+    return primitiveResource;
+}
+
+BROKER_STATE ResourcePresence::getResourceState()
+{
+    return state;
 }