6 #include "ResourceBroker.h"
8 #define OIC_COAP "coap://"
9 #define DEFAULT_CONTEXT_VALUE 0x99
11 typedef std::function<OCStackApplicationResult(void *, OCDoHandle, OCClientResponse *)> FindCB;
13 ResourceBroker * ResourceBroker::s_instance = null;
15 class DiscoverResource: public PrimitiveResource {
18 DiscoverResource(PrimitiveResource & pResource, DiscoverCB _cb) :
19 Uri(pResource.getUri()), Address(pResource.getAddress()), discovercb(_cb) {
20 pFindCB = (FindCB)(std::bind(&DiscoverResource::findCB,this,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
22 DiscoverResource(std::string _Uri, std::string _Address, DiscoverCB _cb) :
23 Uri(_Uri), Address(_Address), discovercb(_cb) {
24 pFindCB = (FindCB)(std::bind(&DiscoverResource::findCB, this,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
27 const DiscoverCB discovercb;
31 OCStackApplicationResult findCB(void * ctx, OCDoHandle handle,OCClientResponse * clientResponse)
33 OCStackApplicationResult ret = OC_STACK_DELETE_TRANSACTION;
34 // parse about resource info
36 // create primitiveResource
37 PrimitiveResource * retResource = new PrimitiveResource(this->Uri, this->Address);
39 this->discovercb(retResource);
41 std::auto_ptr bye_bye(this);
42 /////////////////////////////////////////////////////////////////////////////
43 std::cout << "Is Possible?? : " << this->getAddress() << std::endl;
44 /////////////////////////////////////////////////////////////////////////////
49 ResourceBroker::ResourceBroker() {
50 // TODO Auto-generated constructor stub
54 ResourceBroker::~ResourceBroker() {
55 // TODO Auto-generated destructor stub
58 ResourceBroker * ResourceBroker::getInstance() {
60 s_mutexForCreation.lock();
62 s_instance = new ResourceBroker();
64 s_mutexForCreation.unlock();
69 OCStackResult ResourceBroker::discoverResource(const std::string _uri,
70 const std::string _address, DiscoverCB _cb) {
71 OCStackResult ret = OC_STACK_INVALID_PARAM;
73 if (_uri.empty() || _address.empty()) {
77 ret = OC_STACK_INVALID_CALLBACK;
81 DiscoverResource * dResource = new DiscoverResource(_uri, _address, _cb);
83 OCCallbackData cbData;
84 std::string fullAddress = OIC_COAP + _address;
86 cbData.cb = dResource->pFindCB;
87 cbData.context = (void *) DEFAULT_CONTEXT_VALUE;
90 return OCDoResource(&handle, OC_REST_GET, fullAddress.c_str(), _uri.c_str(), 0, OC_ALL,
91 OC_LOW_QOS, &cbData, NULL, 0);
94 OCStackResult ResourceBroker::discoverResource(PrimitiveResource & pResource,
96 return this->discoverResource(pResource.getUri(), pResource.getAddress(), _cb);
99 OCStackResult ResourceBroker::hostResource(const std::string _uri,const std::string _address, BrokerCB _cb)
101 OCStackResult ret = OC_STACK_INVALID_PARAM;
102 if (uri.empty() || address.empty()) {
106 ret = OC_STACK_INVALID_CALLBACK;
112 OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, BrokerCB cb)
114 OCStackResult ret = OC_STACK_INVALID_PARAM;
115 if (pResource.getUri().empty() || pResource.getAddress().empty()) {
119 ret = OC_STACK_INVALID_CALLBACK;
125 bool ResourceBroker::isPrimitiveResource(PrimitiveResource& pResource, BrokerCB cb)
127 if(s_presenceInfo.empty())
131 std::list<PresenceInfo*>::iterator it;
132 PresenceInfo item = new PresenceInfo(pResource.getUri(), pResource.getAddress(), cb);
133 item.PrimitiveResource(pResource.getUri(),pResource.getAddress());
134 it = std::find(s_presenceInfo.begin(),s_presenceInfo.end(),item);
135 if(it==s_presenceInfo.end())