1 //******************************************************************
3 // Copyright 2014 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 "VirtualRepresentation.h"
23 AttributeMap VirtualRepresentation::s_attributeMap;
25 std::mutex VirtualRepresentation::s_mutexAttributeMap;
26 std::condition_variable VirtualRepresentation::s_conditionAttributeMap;
27 bool VirtualRepresentation::m_isReadyAttributeMap = true;
31 VirtualRepresentation::VirtualRepresentation()
33 m_resourceHandle = NULL;
34 m_resourceProperty = 0x00;
37 VirtualRepresentation::~VirtualRepresentation()
41 std::string VirtualRepresentation::addVirtualTag(std::string uri)
43 std::string ret = uri;
44 return ret.append(VIRTURL_TAG + std::to_string(g_num++));
47 OCResourceHandle VirtualRepresentation::getResourceHandle()
49 return m_resourceHandle;
52 std::string VirtualRepresentation::getUri()
57 std::string VirtualRepresentation::getHostIP()
59 return m_originHostIP;
62 std::string VirtualRepresentation::getResourceTypeName()
64 return m_resourceTypeName;
67 std::string VirtualRepresentation::getResourceInterface()
69 return m_resourceInterface;
72 uint8_t VirtualRepresentation::getResourceProperty()
74 return m_resourceProperty;
77 int VirtualRepresentation::setUri(std::string uri)
79 m_virtualUri = addVirtualTag(uri);
83 int VirtualRepresentation::setHostIP(std::string ip)
89 int VirtualRepresentation::setResourceTypeName(std::string typeName)
91 m_resourceTypeName = typeName;
95 int VirtualRepresentation::setResourceInterface(std::string interface)
97 m_resourceInterface = interface;
101 int VirtualRepresentation::setResourceProperty(uint8_t property)
103 m_resourceProperty = property;
107 int VirtualRepresentation::setResourceHandle(OCResourceHandle & handle)
109 m_resourceHandle = handle;
113 int VirtualRepresentation::getRepresentation(OCRepresentation& oc)
115 oc.setAttributeMap(s_attributeMap);
116 oc.setUri(this->getUri().c_str());
120 OCEntityHandlerResult VirtualRepresentation::entityHandler(const std::shared_ptr<OCResourceRequest> request ,
121 const std::shared_ptr<OCResourceResponse> response)
125 std::string requestType = request->getRequestType();
126 int requestFlag = request->getRequestHandlerFlag();
128 if(requestFlag == RequestHandlerFlag::InitFlag)
132 else if(requestFlag == RequestHandlerFlag::RequestFlag)
134 if( (requestType == "GET") && response )
137 std::unique_lock< std::mutex > lck(s_mutexAttributeMap);
138 while(!m_isReadyAttributeMap)
140 s_conditionAttributeMap.wait(lck);
142 m_isReadyAttributeMap = false;
144 OCRepresentation rep;
145 getRepresentation(rep);
147 response->setErrorCode(200);
148 response->setResourceRepresentation(rep , DEFAULT_INTERFACE);
150 m_isReadyAttributeMap = true;
151 s_conditionAttributeMap.notify_all();
153 else if(requestType == "PUT")
157 else if(requestType == "POST")
161 else if(requestType == "DELETE")
170 else if(requestFlag == RequestHandlerFlag::InitFlag)
174 else if(requestFlag == RequestHandlerFlag::ObserverFlag)
177 cout << "requestFlag == RequestHandlerFlag::ObserverFlag\n";
181 // requestFlag is not [Request, Init, Observer]
187 // Param(request) is empty.
193 void VirtualRepresentation::onObserve(const HeaderOptions &headerOption, const OCRepresentation &rep , const int eCode , const int sequenceNumber)
195 cout << "VirtualRepresentation::onObserve Enter\n";
196 if(eCode == SUCCESS_RESPONSE)
199 AttributeMap inputAttributeMap = rep.getAttributeMap();
201 if(ResourceManager::getInstance()->isEmptyAttributeMap(inputAttributeMap))
207 VirtualRepresentation tmpObj = *this;
208 if(!tmpObj.getUri().empty())
211 AttributeMap tmpAttMap = ResourceManager::getInstance()->copyAttributeMap(inputAttributeMap);
215 std::unique_lock< std::mutex > lck(s_mutexAttributeMap);
217 while(!m_isReadyAttributeMap)
220 s_conditionAttributeMap.wait(lck);
223 m_isReadyAttributeMap = false;
225 s_attributeMap = tmpAttMap;
227 m_isReadyAttributeMap = true;
229 s_conditionAttributeMap.notify_all();
233 if(ResourceManager::getInstance()->m_onObserve)
236 ResourceManager::getInstance()->m_onObserve(inputAttributeMap, tmpObj.getResourceHandle());
246 cout << "VirtualRepresentation::onObserve Out\n";