Fix for observe request handling issue.
authorHarish Kumara Marappa <h.marappa@samsung.com>
Fri, 10 Jul 2015 12:49:36 +0000 (18:19 +0530)
committerUze Choi <uzchoi@samsung.com>
Mon, 13 Jul 2015 01:18:35 +0000 (01:18 +0000)
This change set also includes code for notifying the application layer
when simulator resource model gets changed.

Change-Id: If1cae07038485636aef46a4fe5d76d17d05666ec
Signed-off-by: Harish Kumara Marappa <h.marappa@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1619
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/simulator/examples/server/service_provider.cpp
service/simulator/src/simulator_attribute_automation.h
service/simulator/src/simulator_resource.cpp
service/simulator/src/simulator_resource.h
service/simulator/src/simulator_resource_creator.cpp

index a9cbcee..e9e3ed6 100644 (file)
@@ -92,14 +92,14 @@ class SimLightResource
         }
 
         void onResourceModelChanged(const std::string &uri,
-                                    const std::vector<SimulatorResourceModel::Attribute> &attributes)
+                                    const SimulatorResourceModel &resModel)
         {
-            std::cout << "[callback] Resource model is changed URI: " << uri.c_str() << "Count : " <<
-                      attributes.size() << std::endl;
+            std::cout << "[callback] Resource model is changed URI: " << uri.c_str() << " Count : " <<
+                      resModel.size() << std::endl;
             std::cout << "#### Modified attributes are ####" << std::endl;
-            for (auto & attribute : attributes)
+            for (auto & attribute : resModel.getAttributes())
             {
-                std::cout << attribute.getName() << " :  " << attribute.valueToString().c_str() << std::endl;
+                std::cout << attribute.second.getName() << " :  " << attribute.second.valueToString().c_str() << std::endl;
             }
             std::cout << "########################" << std::endl;
         }
index 4b9d03e..a23764a 100644 (file)
 
 class SimulatorResource;
 
-typedef enum class
+enum class AutomationType
 {
     NORMAL,
     RECURRENT
-} AutomationType;
+};
 
 class AttributeUpdateAutomation
 {
index f044817..a9db65c 100644 (file)
@@ -86,6 +86,7 @@ void SimulatorResource::updateAttributeFromAllowedValues(const std::string &attr
         const int allowedValueIndex)
 {
     m_resModel.updateAttributeFromAllowedValues(attrName, allowedValueIndex);
+    notifyListOfObservers();
 }
 
 SimulatorResourceModel SimulatorResource::getModel() const
@@ -218,7 +219,8 @@ OCEntityHandlerResult SimulatorResource::entityHandler(std::shared_ptr<OC::OCRes
             errCode = OC_EH_ERROR;
         }
     }
-    else if (OC::RequestHandlerFlag::ObserverFlag & request->getRequestHandlerFlag())
+
+    if (OC::RequestHandlerFlag::ObserverFlag & request->getRequestHandlerFlag())
     {
         OC::ObservationInfo observationInfo = request->getObservationInfo();
         if (OC::ObserveAction::ObserveRegister == observationInfo.action)
@@ -240,15 +242,22 @@ OCEntityHandlerResult SimulatorResource::entityHandler(std::shared_ptr<OC::OCRes
 
 void SimulatorResource::notifyListOfObservers ()
 {
-    if (0 == m_interestedObservers.size())
-        return;
-
-    std::shared_ptr<OC::OCResourceResponse> resourceResponse =
-    {std::make_shared<OC::OCResourceResponse>()};
+    if(getHandle())
+    {
+        if (m_interestedObservers.size())
+        {
+            std::shared_ptr<OC::OCResourceResponse> resourceResponse =
+            {std::make_shared<OC::OCResourceResponse>()};
 
-    resourceResponse->setErrorCode(200);
-    resourceResponse->setResponseResult(OC_EH_OK);
-    resourceResponse->setResourceRepresentation(getOCRepresentation(), OC::DEFAULT_INTERFACE);
+            resourceResponse->setErrorCode(200);
+            resourceResponse->setResponseResult(OC_EH_OK);
+            resourceResponse->setResourceRepresentation(getOCRepresentation(), OC::DEFAULT_INTERFACE);
 
-    OC::OCPlatform::notifyListOfObservers(getHandle(), m_interestedObservers, resourceResponse);
+            OC::OCPlatform::notifyListOfObservers(getHandle(), m_interestedObservers, resourceResponse);
+        }
+        if(m_callback)
+        {
+            m_callback(getURI(),getModel());
+        }
+    }
 }
index 868c539..ab5389f 100644 (file)
@@ -42,7 +42,7 @@ class SimulatorResource
         friend class ResourceManager;
 
     public:
-        typedef std::function<void (const std::string &uri, const std::vector<SimulatorResourceModel::Attribute> &attributes)>
+        typedef std::function<void (const std::string &uri, const SimulatorResourceModel &resModel)>
         ResourceModelChangedCB;
 
         /**
index acb0cd3..6011fea 100644 (file)
@@ -41,7 +41,7 @@ SimulatorResourcePtr SimulatorResourceCreator::createLightResoure()
 
     // set other properties
     lightResource->setName("Light");
-    lightResource->setURI("oic/light");
+    lightResource->setURI("/oic/light");
     lightResource->setResourceType("oic.light");
     lightResource->setInterfaceType(OC::DEFAULT_INTERFACE);