US1310: C++ Client will now do callbacks when an error callback is received and it...
authorErich Keane <erich.keane@intel.com>
Wed, 6 Aug 2014 03:15:59 +0000 (20:15 -0700)
committerErich Keane <erich.keane@intel.com>
Thu, 7 Aug 2014 20:06:20 +0000 (13:06 -0700)
Patch 2 & 3: responded to code-review feedback

Change-Id: I726cca729164ae5eb13ac154a0bec9819e2f441f

OCLib/InProcClientWrapper.cpp
OCLib/OCResource.cpp
examples/simpleclient.cpp
include/IClientWrapper.h
include/InProcClientWrapper.h
include/OCResource.h
include/OutOfProcClientWrapper.h

index 35539c8..98df52e 100644 (file)
@@ -67,7 +67,6 @@ namespace OC
                 // TODO: @Erich do something with result if failed?
             }
 
-            //std::this_thread::yield();
             // To minimize CPU utilization we may wish to do this with sleep
             std::this_thread::sleep_for(std::chrono::milliseconds(10));
         }
@@ -131,7 +130,7 @@ namespace OC
     {
         if(clientResponse->result == OC_STACK_OK)
         {
-            ListenContext* context = (ListenContext*)ctx;
+            ListenContext* context = static_cast<ListenContext*>(ctx);
     
             std::stringstream requestStream;
             requestStream << clientResponse->resJSONPayload;
@@ -162,7 +161,7 @@ namespace OC
                 }
             
             }
-            return OC_STACK_DELETE_TRANSACTION;
+            return OC_STACK_KEEP_TRANSACTION;
 
         }
         else
@@ -182,7 +181,7 @@ namespace OC
         context->callback = callback;
         context->clientWrapper = shared_from_this();
 
-        cbdata->context =  (void*)context;
+        cbdata->context =  static_cast<void*>(context);
         cbdata->cb = listenCallback;
 
         {
@@ -202,7 +201,6 @@ namespace OC
     {
         std::stringstream requestStream;
         requestStream<<clientResponse->resJSONPayload;
-
         if(strlen((char*)clientResponse->resJSONPayload) == 0)
         {
             return AttributeMap();
@@ -226,34 +224,30 @@ namespace OC
             values.push_back(value);
             attrs[name] = values;
         }
-
         return attrs;
     }
     OCStackApplicationResult getResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
     {
-        if(clientResponse->result == OC_STACK_OK)
-        {
-            GetSetContext* context = (GetSetContext*)ctx;
-            AttributeMap attrs = parseGetSetCallback(clientResponse);
+        GetSetContext* context = static_cast<GetSetContext*>(ctx);
         
-            std::thread exec(context->callback,attrs, 200);
-            exec.detach();
+        AttributeMap attrs;
 
-            return OC_STACK_DELETE_TRANSACTION;
-        }
-        else
+        if(clientResponse->result == OC_STACK_OK)
         {
-            std::cout<<"listen Callback got failed result: " << clientResponse->result<<std::endl;
-            return OC_STACK_DELETE_TRANSACTION;
-        }
+            attrs = parseGetSetCallback(clientResponse);
+        }        
+
+        std::thread exec(context->callback, attrs, clientResponse->result);
+        exec.detach();
+        return OC_STACK_DELETE_TRANSACTION;
     }
-    OCStackResult InProcClientWrapper::GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback)
+    OCStackResult InProcClientWrapper::GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback)
     {
         OCStackResult result;
         OCCallbackData* cbdata = new OCCallbackData();
         GetSetContext* ctx = new GetSetContext();
         ctx->callback = callback;
-        cbdata->context = (void*)ctx;
+        cbdata->context = static_cast<void*>(ctx);
         cbdata->cb = &getResourceCallback;
 
         // TODO: in the future the cstack should be combining these two strings!
@@ -274,21 +268,16 @@ namespace OC
     
     OCStackApplicationResult setResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
     {
-        if(clientResponse->result == OC_STACK_OK)
-        {
-            GetSetContext* context = (GetSetContext*)ctx;
-            AttributeMap attrs = parseGetSetCallback(clientResponse);
-
-            std::thread exec(context->callback, attrs, 200);
-            exec.detach();
+        GetSetContext* context = static_cast<GetSetContext*>(ctx);
+        AttributeMap attrs;
 
-            return OC_STACK_DELETE_TRANSACTION;
-        }
-        else
+        if(clientResponse->result == OC_STACK_OK)
         {
-            std::cout<<"listen Callback got failed result: " << clientResponse->result<<std::endl;
-            return OC_STACK_DELETE_TRANSACTION;
+            attrs = parseGetSetCallback(clientResponse);
         }
+        std::thread exec(context->callback, attrs, clientResponse->result);
+        exec.detach();
+        return OC_STACK_DELETE_TRANSACTION;
     }
     
     std::string InProcClientWrapper::assembleSetResourceUri(std::string uri, const QueryParamsMap& queryParams)
@@ -331,7 +320,7 @@ namespace OC
         return payload.str();
     }
 
-    OCStackResult InProcClientWrapper::SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap&,const int&)>& callback)
+    OCStackResult InProcClientWrapper::SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap,const int)>& callback)
     {
         OCStackResult result; 
         OCCallbackData* cbdata = new OCCallbackData();
@@ -345,7 +334,7 @@ namespace OC
 
         // TODO: end of above
 
-        cbdata->context = (void*)ctx;
+        cbdata->context = static_cast<void*>(ctx);
         {
             std::lock_guard<std::mutex> lock(m_csdkLock);
             OCDoHandle handle;
@@ -362,29 +351,24 @@ namespace OC
     };
 
     OCStackApplicationResult observeResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
-    {   
+    {
+        ObserveContext* context = static_cast<ObserveContext*>(ctx);
+        AttributeMap attrs;
         if(clientResponse->result == OC_STACK_OK)
         {
-            ObserveContext* context = (ObserveContext*)ctx;
-            AttributeMap attrs = parseGetSetCallback(clientResponse);
-
-            std::thread exec(context->callback, attrs, 200);
-            exec.detach();
-            return OC_STACK_KEEP_TRANSACTION;
-        }
-        else
-        {
-            std::cout<<"Observe Callback got failed result: "<<clientResponse->result << std::endl;
-            return OC_STACK_KEEP_TRANSACTION;
+            attrs = parseGetSetCallback(clientResponse);
         }
+        std::thread exec(context->callback, attrs, clientResponse->result);
+        exec.detach();
+        return OC_STACK_KEEP_TRANSACTION;
     }
-    OCStackResult InProcClientWrapper::ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback)
+    OCStackResult InProcClientWrapper::ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback)
     {
         OCStackResult result;
         OCCallbackData* cbdata = new OCCallbackData();
         ObserveContext* ctx = new ObserveContext();
         ctx->callback = callback;
-        cbdata->context = (void*)ctx;
+        cbdata->context = static_cast<void*>(ctx);
         cbdata->cb = &observeResourceCallback;
 
         ostringstream os;
@@ -405,21 +389,10 @@ namespace OC
 
     OCStackApplicationResult unobserveResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
     {
-        std::cout << "Unobserve callback called...."<<std::endl;
-        UnobserveContext* context = (UnobserveContext*)ctx;
-        if(clientResponse->result == OC_STACK_OK)
-        {
-            std::thread exec(context->callback, 200);
-            exec.detach();
-            return OC_STACK_DELETE_TRANSACTION;
-        }
-        else
-        {
-            std::cout<<"Unobserve callback got failed result: "<<clientResponse->result <<std::endl;
-            std::thread exec(context->callback, clientResponse->result);
-            exec.detach();
-            return OC_STACK_DELETE_TRANSACTION;
-        }
+        UnobserveContext* context = static_cast<UnobserveContext*>(ctx);
+        std::thread exec(context->callback, clientResponse->result);
+        exec.detach();
+        return OC_STACK_DELETE_TRANSACTION;
     }
     OCStackResult InProcClientWrapper::CancelObserveResource(OCDoHandle handle, const std::string& host, const std::string& uri)
     {
index ab90ea7..e822404 100644 (file)
@@ -37,17 +37,17 @@ namespace OC {
     {
     }
 
-    OCStackResult OCResource::get(std::function<void(const AttributeMap&, const int&)> attributeHandler)
+    OCStackResult OCResource::get(std::function<void(const AttributeMap, const int)> attributeHandler)
     {
         return m_clientWrapper->GetResourceAttributes(m_host, m_uri, attributeHandler);
     }
 
-    OCStackResult OCResource::put(const AttributeMap& attributeMap, const QueryParamsMap& queryParametersMap, std::function<void(const AttributeMap&, const int&)> attributeHandler)
+    OCStackResult OCResource::put(const AttributeMap& attributeMap, const QueryParamsMap& queryParametersMap, std::function<void(const AttributeMap, const int)> attributeHandler)
     {
         return m_clientWrapper->SetResourceAttributes(m_host, m_uri, attributeMap, queryParametersMap, attributeHandler);
     }
 
-    OCStackResult OCResource::observe(std::function<void(const AttributeMap&, const int&)> observeHandler)
+    OCStackResult OCResource::observe(std::function<void(const AttributeMap, const int)> observeHandler)
     {
         if(m_observeHandle != nullptr)
         {
index 9a750d6..009f1b3 100644 (file)
@@ -27,7 +27,7 @@
 
 using namespace OC;
 
-const int SUCCESS_RESPONSE = 200; 
+const int SUCCESS_RESPONSE = 0; 
 std::shared_ptr<OCResource> curResource;
 
 int observe_count()
@@ -36,7 +36,7 @@ int observe_count()
     return ++oc;
 }
 
-void onObserve(const AttributeMap& attributeMap, const int& eCode)
+void onObserve(const AttributeMap attributeMap, const int eCode)
 {
     if(eCode == SUCCESS_RESPONSE)
     {
@@ -71,12 +71,12 @@ void onObserve(const AttributeMap& attributeMap, const int& eCode)
 }
 
 // callback handler on PUT request
-void onPut(const AttributeMap& attributeMap, const int& eCode)
+void onPut(const AttributeMap attributeMap, const int eCode)
 {
     if(eCode == SUCCESS_RESPONSE)
     {
         std::cout << "PUT request was successful" << std::endl;
-        
+        std::cout << "Put count: "<< attributeMap.size()<<std::endl;
         for(auto it = attributeMap.begin(); it != attributeMap.end(); ++it)
         {
             std::cout << "\tAttribute name: "<< it->first << " value: ";
@@ -123,7 +123,7 @@ void putLightRepresentation(std::shared_ptr<OCResource> resource)
 }
 
 // callback handler on GET request
-void onGet(const AttributeMap& attributeMap, const int& eCode)
+void onGet(const AttributeMap attributeMap, const int eCode)
 {
     if(eCode == SUCCESS_RESPONSE)
     {
index 620e7fb..682ff7d 100644 (file)
@@ -33,9 +33,9 @@ namespace OC
         typedef std::shared_ptr<IClientWrapper> Ptr;
         virtual OCStackResult ListenForResource(const std::string& serviceUrl, const std::string& resourceType,
             std::function<void(std::shared_ptr<OCResource>)>& callback) = 0;
-        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback)=0;
-        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap&,const int&)>& callback)=0;
-        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback)=0;
+        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback)=0;
+        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap,const int)>& callback)=0;
+        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback)=0;
         virtual OCStackResult CancelObserveResource(OCDoHandle handle, const std::string& host, const std::string& uri)=0;
         virtual ~IClientWrapper(){}
        
index c63da16..0ea19b7 100644 (file)
@@ -44,9 +44,9 @@ namespace OC
         virtual ~InProcClientWrapper();
 
         virtual OCStackResult ListenForResource(const std::string& serviceUrl, const std::string& resourceType, std::function<void(std::shared_ptr<OCResource>)>& callback);
-        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback);
-        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap&,const int&)>& callback);
-        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback);
+        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback);
+        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap,const int)>& callback);
+        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback);
         virtual OCStackResult CancelObserveResource(OCDoHandle handle, const std::string& host, const std::string& uri);
         
         // Note: this should never be called by anyone but the handler for the listen command.  It is public becuase that needs to be a non-instance callback
index 9db8b6a..14dba11 100644 (file)
@@ -68,7 +68,7 @@ namespace OC
         * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. 
         * NOTE: OCStackResult is defined in ocstack.h.
         */
-        OCStackResult get(std::function<void(const AttributeMap&, const int&)> attributeHandler);
+        OCStackResult get(std::function<void(const AttributeMap, const int)> attributeHandler);
 
         /**
         * Function to set the attributes of a resource (via PUT)
@@ -81,7 +81,7 @@ namespace OC
         * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. 
         * NOTE: OCStackResult is defined in ocstack.h.
         */
-        OCStackResult put(const AttributeMap& attributeMap, const QueryParamsMap& queryParametersMap, std::function< void(const AttributeMap&,const int&)> attributeHandler);
+        OCStackResult put(const AttributeMap& attributeMap, const QueryParamsMap& queryParametersMap, std::function< void(const AttributeMap,const int)> attributeHandler);
 
         /**
         * Function to set observation on the resource
@@ -92,7 +92,7 @@ namespace OC
         * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. 
         * NOTE: OCStackResult is defined in ocstack.h.
         */
-        OCStackResult observe(std::function<void(const AttributeMap&, const int&)> observeHandler);
+        OCStackResult observe(std::function<void(const AttributeMap, const int)> observeHandler);
 
         /**
         * Function to cancel the observation on the resource
index 644b59f..a56d616 100644 (file)
@@ -31,9 +31,9 @@ namespace OC
         OutOfProcClientWrapper(PlatformConfig cfg) { }
         virtual OCStackResult ListenForResource(const std::string& serviceUrl, const std::string& resourceType, std::function<void(std::shared_ptr<OCResource>)>& callback) {return OC_STACK_NOTIMPL;}
 
-        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback){return OC_STACK_NOTIMPL;}
-        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap&,const int&)>& callback){return OC_STACK_NOTIMPL;}
-        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap&, const int&)>& callback){return OC_STACK_NOTIMPL;}
+        virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback){return OC_STACK_NOTIMPL;}
+        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap,const int)>& callback){return OC_STACK_NOTIMPL;}
+        virtual OCStackResult ObserveResource(OCDoHandle* handle, const std::string& host, const std::string& uri, std::function<void(const AttributeMap, const int)>& callback){return OC_STACK_NOTIMPL;}
         virtual OCStackResult CancelObserveResource(OCDoHandle handle, const std::string& host, const std::string& uri){return OC_STACK_NOTIMPL;}
 
         virtual std::shared_ptr<OCResource> parseOCResource(IClientWrapper::Ptr clientWrapper, const std::string& host, const boost::property_tree::ptree resourceNode) {return nullptr;}