Update Broker latest skeleton code
authorjyong2.kim <jyong2.kim@samsung.com>
Wed, 3 Jun 2015 13:33:56 +0000 (22:33 +0900)
committerUze Choi <uzchoi@samsung.com>
Tue, 9 Jun 2015 11:27:02 +0000 (11:27 +0000)
delete PrimitiveResource/DicoverHandler class.
update broker's class name.
remove naming "handler".

Change-Id: Ib89384980562b5b4b5e24db0459fdd49a02411b3
Signed-off-by: jyong2.kim <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1183
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
13 files changed:
service/basis/resourceBroker/include/BrokerTypes.h [new file with mode: 0755]
service/basis/resourceBroker/include/DevicePresence.h [new file with mode: 0755]
service/basis/resourceBroker/include/PresenceChecker.h [deleted file]
service/basis/resourceBroker/include/PresenceInfo.h [deleted file]
service/basis/resourceBroker/include/PrimitiveResource.h [deleted file]
service/basis/resourceBroker/include/ResourceBroker.h
service/basis/resourceBroker/include/ResourcePresence.h [new file with mode: 0755]
service/basis/resourceBroker/src/DevicePresence.cpp [new file with mode: 0755]
service/basis/resourceBroker/src/PresenceChecker.cpp [deleted file]
service/basis/resourceBroker/src/PresenceInfo.cpp [deleted file]
service/basis/resourceBroker/src/PrimitiveResource.cpp [deleted file]
service/basis/resourceBroker/src/ResourceBroker.cpp
service/basis/resourceBroker/src/ResourcePresence.cpp [new file with mode: 0755]

diff --git a/service/basis/resourceBroker/include/BrokerTypes.h b/service/basis/resourceBroker/include/BrokerTypes.h
new file mode 100755 (executable)
index 0000000..13cf464
--- /dev/null
@@ -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 <iostream>
+#include <functional>
+
+#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<void(std::shared_ptr<OC::OCResource>)> FindCB;
+
+typedef std::function<OCStackResult(BROKER_STATE)> BrokerCB;
+
+typedef std::function<DISCOVER_TRANSACTION(std::shared_ptr<PrimitiveResource> 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<void(OCStackResult, const unsigned int,
+        const std::string&)> SubscribeCallback;
+
+typedef std::function<void(const HeaderOptions&, const ResponseStatement&, int)> GetCallback;
+
+#endif // BROKERTYPES_H_
diff --git a/service/basis/resourceBroker/include/DevicePresence.h b/service/basis/resourceBroker/include/DevicePresence.h
new file mode 100755 (executable)
index 0000000..05c7882
--- /dev/null
@@ -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 <list>
+#include <string>
+
+#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<ResourcePresence *> * 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 (executable)
index e824444..0000000
+++ /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 (executable)
index eec3d71..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * PresenceInfo.h
- *
- */
-
-#ifndef PRESENCEINFO_H_
-#define PRESENCEINFO_H_
-
-#include <iostream>
-#include <functional>
-#include <pthread.h>
-#include <cstdint>
-#include <memory>
-#include <string>
-#include <vector>
-#include <list>
-#include <condition_variable>
-
-// Iotivity Base CAPI
-#include "ocstack.h"
-#include "logger.h"
-
-#include "PrimitiveResource.h"
-#include "ResourceBroker.h"
-
-enum class BROKER_STATE;
-
-typedef std::function<OCStackResult(BROKER_STATE)> BrokerCB;
-typedef std::function<OCStackApplicationResult(void *, OCDoHandle, OCClientResponse *)> 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<BrokerRequesterInfo *> * 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 (executable)
index 108aba2..0000000
+++ /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_ */
index 4ee3146..6af94f3 100755 (executable)
@@ -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 <iostream>
 #include <functional>
-#include <pthread.h>
-#include <cstdint>
-#include <memory>
-#include <string>
-#include <vector>
 #include <list>
+#include <string>
+#include <algorithm>
 #include <mutex>
-#include <thread>
 #include <condition_variable>
-#include <algorithm>
-
-// 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<OCStackResult(PrimitiveResource * resource)> 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 (executable)
index 0000000..9d754f5
--- /dev/null
@@ -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 <functional>
+#include <list>
+
+#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<BrokerRequesterInfo *> * 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 (executable)
index 0000000..aba8f32
--- /dev/null
@@ -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<ResourcePresence *>();
+    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<ResourcePresence *>::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 (executable)
index 6b07ab0..0000000
+++ /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 (executable)
index 40be10b..0000000
+++ /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 *>();
-    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 *>();
-    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 (executable)
index 68b0a8a..0000000
+++ /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
-}
-
index 7d35fc1..9a7822c 100755 (executable)
-/*
- * 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<OCStackApplicationResult(void *, OCDoHandle, OCClientResponse *)> 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<DevicePresence *>::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<PresenceInfo*>::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 (executable)
index 0000000..22ae25c
--- /dev/null
@@ -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<BrokerRequesterInfo *>();
+    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)
+{
+
+}