// ChangeLightRepresentaion is an observation function, // which notifies any changes to the resource to stack // via notifyObservers void * ChangeLightRepresentation (void *param) { LightResource* lightPtr = (LightResource*) param; // This function continuously monitors for the changes while (1) { sleep (3); if (gObservation) { // If under observation if there are any changes to the light resource // we call notifyObservors // // For demostration we are changing the power value and notifying. lightPtr->m_power += 10; cout << "\nPower updated to : " << lightPtr->m_power << endl; cout << "Notifying observers with resource handle: " << lightPtr->getHandle() << endl; OCStackResult result = OC_STACK_OK; if(isListOfObservers) { std::shared_ptr<OCResourceResponse> resourceResponse = {std::make_shared<OCResourceResponse>()}; resourceResponse->setErrorCode(200); resourceResponse->setResourceRepresentation(lightPtr->get(), DEFAULT_INTERFACE); result = OCPlatform::notifyListOfObservers( lightPtr->getHandle(), lightPtr->m_interestedObservers, resourceResponse); } else { result = OCPlatform::notifyAllObservers(lightPtr->getHandle()); } if(OC_STACK_NO_OBSERVERS == result) { cout << "No More observers, stopping notifications" << endl; gObservation = 0; } } } return NULL; }
void * handleSlowResponse (void *param, std::shared_ptr<OCResourceRequest> pRequest) { // This function handles slow response case LightResource* lightPtr = (LightResource*) param; // Induce a case for slow response by using sleep std::cout << "SLOW response" << std::endl; sleep (10); auto pResponse = std::make_shared<OC::OCResourceResponse>(); pResponse->setRequestHandle(pRequest->getRequestHandle()); pResponse->setResourceHandle(pRequest->getResourceHandle()); pResponse->setResourceRepresentation(lightPtr->get()); pResponse->setErrorCode(200); pResponse->setResponseResult(OC_EH_OK); // Set the slow response flag back to false isSlowResponse = false; OCPlatform::sendResponse(pResponse); return NULL; }