1 //******************************************************************
3 // Copyright 2016 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 #ifndef _NS_CONSUMER_SIMULATOR_H_
22 #define _NS_CONSUMER_SIMULATOR_H_
26 #include "OCPlatform.h"
29 class NSConsumerSimulator
32 std::function<void(const int&, const std::string&, const std::string&,
33 const std::string&)> m_messageFunc;
34 std::function<void(const int&, const int&)> m_syncFunc;
36 std::shared_ptr<OC::OCResource> m_syncResource;
37 std::shared_ptr<OC::OCResource> m_msgResource;
38 std::shared_ptr<OC::OCResource> m_topicResource;
42 : m_messageFunc(), m_syncFunc(),
44 ~NSConsumerSimulator() = default;
46 NSConsumerSimulator(const NSConsumerSimulator &) = delete;
47 NSConsumerSimulator & operator = (const NSConsumerSimulator &) = delete;
49 NSConsumerSimulator(NSConsumerSimulator &&) = delete;
50 NSConsumerSimulator & operator = (NSConsumerSimulator &&) = delete;
54 OC::OCPlatform::findResource("", std::string("/oic/res?rt=oic.r.notification"),
55 OCConnectivityType::CT_DEFAULT,
56 std::bind(&NSConsumerSimulator::findResultCallback, this, std::placeholders::_1),
57 OC::QualityOfService::LowQos);
60 void syncToProvider(int & type, const int & id, const std::string & providerID)
62 if (m_syncResource == nullptr)
64 std::cout << "m_syncResource is null" << std::endl;
68 OC::OCRepresentation rep;
69 rep.setValue("PROVIDER_ID", providerID);
70 rep.setValue("MESSAGE_ID", id);
71 rep.setValue("STATE", type);
73 m_syncResource->post(rep, OC::QueryParamsMap(), &onPost, OC::QualityOfService::LowQos);
78 if(!msgResourceCancelObserve(OC::QualityOfService::HighQos) &&
79 !syncResourceCancelObserve(OC::QualityOfService::HighQos))
84 void setCallback(std::function<void(const int&, const std::string&,
85 const std::string&, const std::string&)> messageFunc,
86 const std::function<void(const int&, const int&)> & syncFunc)
88 m_messageFunc = messageFunc;
89 m_syncFunc = syncFunc;
93 static void onPost(const OC::HeaderOptions &/*headerOption*/,
94 const OC::OCRepresentation & /*rep*/ , const int eCode)
96 std::cout << __func__ << " result : " << eCode << std::endl;
98 void findResultCallback(std::shared_ptr<OC::OCResource> resource)
101 std::cout << __func__ << " " << resource->host() << std::endl;
103 if(resource->uri() == "/notification")
105 resource->get(OC::QueryParamsMap(),
106 std::bind(&NSConsumerSimulator::onGet, this,
107 std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
108 resource), OC::QualityOfService::LowQos);
111 void onGet(const OC::HeaderOptions &/*headerOption*/,
112 const OC::OCRepresentation & rep , const int eCode,
113 std::shared_ptr<OC::OCResource> resource)
115 std::cout << __func__ << " " << rep.getHost() << " result : " << eCode << std::endl;
117 OC::QueryParamsMap map;
118 map.insert(std::pair<std::string,std::string>(std::string("consumerid"),
119 std::string("123456789012345678901234567890123456")));
123 std::cout << "resourc : host " << resource->host() << std::endl;
124 std::cout << "resourc : uri " << resource->uri() << std::endl;
125 std::cout << " resource->connectivityType() "
126 << resource->connectivityType() << std::endl;
127 std::cout << "resourc : getResourceInterfaces "
128 << resource->getResourceInterfaces()[0] << std::endl;
129 std::cout << "resourc : getResourceTypes "
130 << resource->getResourceTypes()[0] << std::endl;
132 std::vector<std::string> rts{"oic.r.notification"};
135 = OC::OCPlatform::constructResourceObject(
136 std::string(resource->host()), std::string(resource->uri() + "/message"),
137 OCConnectivityType(resource->connectivityType()), true, rts,
138 std::vector<std::string>(resource->getResourceInterfaces()));
140 m_msgResource->observe(OC::ObserveType::Observe, map,
141 std::bind(&NSConsumerSimulator::onObserve, this,
142 std::placeholders::_1, std::placeholders::_2,
143 std::placeholders::_3, std::placeholders::_4, resource),
144 OC::QualityOfService::LowQos);
146 catch(std::exception & e)
148 std::cout << "OC::ResoureInitException : " << e.what() << std::endl;
151 = OC::OCPlatform::constructResourceObject(resource->host(), resource->uri() + "/sync",
152 resource->connectivityType(), true, resource->getResourceTypes(),
153 resource->getResourceInterfaces());
155 m_syncResource->observe(OC::ObserveType::Observe, map,
156 std::bind(&NSConsumerSimulator::onObserve, this,
157 std::placeholders::_1, std::placeholders::_2,
158 std::placeholders::_3, std::placeholders::_4, resource),
159 OC::QualityOfService::LowQos);
163 = OC::OCPlatform::constructResourceObject(resource->host(), resource->uri() + "/topic",
164 resource->connectivityType(), true, resource->getResourceTypes(),
165 resource->getResourceInterfaces());
168 void onObserve(const OC::HeaderOptions &/*headerOption*/,
169 const OC::OCRepresentation &rep , const int &eCode, const int &,
170 std::shared_ptr<OC::OCResource> )
172 std::cout << __func__ << " " << rep.getHost() << " result : " << eCode;
173 std::cout << " uri : " << rep.getUri() << std::endl;
175 if (rep.getUri() == "/notification/message" && rep.hasAttribute("MESSAGE_ID")
176 && rep.getValue<int>("MESSAGE_ID") != 1)
178 std::cout << "ID : " << rep.getValue<int>("ID") << std::endl;
179 std::cout << "TITLE : " << rep.getValueToString("TITLE") << std::endl;
180 std::cout << "CONTENT : " << rep.getValueToString("CONTENT") << std::endl;
181 m_messageFunc(int(rep.getValue<int>("MESSAGE_ID")),
182 std::string(rep.getValueToString("TITLE")),
183 std::string(rep.getValueToString("CONTENT")),
184 std::string(rep.getValueToString("SOURCE")));
186 if(rep.getValue<int>("MESSAGE_ID") == 3)
188 m_topicResource->get(OC::QueryParamsMap(),
189 std::bind(&NSConsumerSimulator::onTopicGet, this, std::placeholders::_1,
190 std::placeholders::_2, std::placeholders::_3, m_topicResource),
191 OC::QualityOfService::LowQos);
194 else if (rep.getUri() == "/notification/sync")
196 std::cout << "else if (rep.getUri() == sync) " << std::endl;
197 m_syncFunc(int(rep.getValue<int>("STATE")), int(rep.getValue<int>("ID")));
201 void onTopicGet(const OC::HeaderOptions &/*headerOption*/,
202 const OC::OCRepresentation & rep , const int eCode,
203 std::shared_ptr<OC::OCResource> resource)
205 //TO-DO using this function.
209 std::cout << "onTopicGet()" << std::endl;
212 OCStackResult msgResourceCancelObserve(OC::QualityOfService qos)
214 return m_msgResource->cancelObserve(qos);
217 OCStackResult syncResourceCancelObserve(OC::QualityOfService qos)
219 return m_syncResource->cancelObserve(qos);
224 #endif //_NS_CONSUMER_SIMULATOR_H_