1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "BrokerTypes.h"
22 #include "ResourceBroker.h"
24 #define OIC_COAP "coap://"
25 #define DEFAULT_CONTEXT_VALUE 0x99
27 ResourceBroker * ResourceBroker::s_instance = NULL;
28 std::unique_ptr<std::list< DevicePresencePtr >> ResourceBroker::s_presenceList(nullptr);
30 ResourceBroker::ResourceBroker()
32 // TODO Auto-generated constructor stub
33 if(s_presenceList == nullptr)
35 s_presenceList = std::unique_ptr<std::list< DevicePresencePtr >>(new std::list<DevicePresencePtr>);
39 ResourceBroker::~ResourceBroker()
41 // TODO Auto-generated destructor stub
42 if(s_presenceList != nullptr)
44 s_presenceList->clear();
48 ResourceBroker * ResourceBroker::getInstance()
52 s_mutexForCreation.lock();
55 s_instance = new ResourceBroker();
57 s_mutexForCreation.unlock();
62 OCStackResult ResourceBroker::hostResource(PrimitiveResourcePtr pResource, BrokerCB cb)
64 OCStackResult ret = OC_STACK_INVALID_PARAM;
65 if (pResource->getUri().empty() || pResource->getHost().empty())
71 ret = OC_STACK_INVALID_CALLBACK;
75 DevicePresencePtr presenceItem = findDevicePresence(pResource, cb);
76 if(presenceItem == NULL)
78 DevicePresencePtr newItem = DevicePresencePtr(new DevicePresence(pResource, cb));
79 s_presenceList->push_back(newItem);
83 presenceItem->addPresenceResource(pResource, cb);
89 DevicePresencePtr ResourceBroker::findDevicePresence(PrimitiveResourcePtr pResource, BrokerCB cb)
91 DevicePresencePtr retDevice(nullptr);
92 if (s_presenceList->empty())// || pResource->isEmpty())
98 std::list<DevicePresencePtr>::iterator it;
100 DevicePresencePtr temp = DevicePresencePtr(new DevicePresence(pResource, cb));
101 it = std::find(s_presenceList->begin(), s_presenceList->end(), temp);
103 if(it == s_presenceList->end())
116 ResourcePresencePtr ResourceBroker::findResourcePresence(PrimitiveResourcePtr pResource, BrokerCB cb)
118 ResourcePresencePtr retResource(nullptr);
119 if (s_presenceList->empty())// || pResource.isEmpty())
125 DevicePresencePtr foundDevice = findDevicePresence(pResource, cb);
126 retResource = foundDevice->findResourcePresence(pResource, cb);