X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fsoft-sensor-manager%2FSSMCore%2Fsrc%2FSensorProcessor%2FResourceFinder.cpp;h=7541ee76cd6f8d29d69df5f424edafb1e7fb9fd3;hb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;hp=57dbe2cdc403dddab38c40d842a83268ea206f14;hpb=00b3660e45c56cb3db35dc2596a054f801b5591a;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp b/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp index 57dbe2c..7541ee7 100644 --- a/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp +++ b/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp @@ -32,6 +32,8 @@ SSMRESULT CResourceFinder::finalConstruct() m_pResourceFinderEvent = NULL; + m_multicastPresenceHandle = nullptr; + CLEANUP: return res; } @@ -40,7 +42,7 @@ void CResourceFinder::finalRelease() { } -SSMRESULT CResourceFinder::registerResourceFinderEvent(IN IResourceFinderEvent *pEvent) +SSMRESULT CResourceFinder::registerResourceFinderEvent(IResourceFinderEvent *pEvent) { m_pResourceFinderEvent = pEvent; return SSM_S_OK; @@ -59,8 +61,6 @@ void CResourceFinder::onResourceFound(std::shared_ptr< OC::OCResource > resource pMessage[0] = RESOURCE_DISCOVER_REQUESTPROFILE; pMessage[1] = reinterpret_cast (new std::shared_ptr(resource)); - std::cout << "Resource Found !! >> " << path << std::endl; - m_pTasker->addTask(this, pMessage); } } @@ -71,12 +71,14 @@ void CResourceFinder::presenceHandler(OCStackResult result, const unsigned int n SSMRESULT res = SSM_E_FAIL; OCStackResult ret = OC_STACK_ERROR; intptr_t *pMessage = NULL; + std::ostringstream requestURI; switch (result) { case OC_STACK_OK: - ret = OC::OCPlatform::findResource("", - "coap://" + hostAddress + "/oc/core?rt=SoftSensorManager.Sensor", + requestURI << "coap://" << hostAddress << "/oc/core?rt=SSManager.Sensor"; + + ret = OC::OCPlatform::findResource("", requestURI.str(), OC_ALL, std::bind(&CResourceFinder::onResourceFound, this, std::placeholders::_1)); if (ret != OC_STACK_OK) @@ -85,7 +87,6 @@ void CResourceFinder::presenceHandler(OCStackResult result, const unsigned int n break; case OC_STACK_PRESENCE_STOPPED: - case OC_STACK_PRESENCE_TIMEOUT: if (m_mapResources.find(hostAddress) != m_mapResources.end()) { while (!m_mapResources[hostAddress].empty()) @@ -101,6 +102,9 @@ void CResourceFinder::presenceHandler(OCStackResult result, const unsigned int n } break; + case OC_STACK_PRESENCE_TIMEOUT: + break; + case OC_STACK_VIRTUAL_DO_NOT_HANDLE: break; @@ -117,18 +121,21 @@ SSMRESULT CResourceFinder::startResourceFinder() SSMRESULT res = SSM_E_FAIL; OCStackResult ret = OC_STACK_ERROR; - OC::OCPlatform::OCPresenceHandle presenceHandle = nullptr; + std::ostringstream requestURI; + requestURI << OC_MULTICAST_DISCOVERY_URI << "?rt=SSManager.Sensor"; - ret = OC::OCPlatform::findResource("", "coap://224.0.1.187/oc/core?rt=SoftSensorManager.Sensor", + std::ostringstream multicastPresenceURI; + multicastPresenceURI << "coap://" << OC_MULTICAST_PREFIX; + + ret = OC::OCPlatform::findResource("", requestURI.str(), OC_ALL, std::bind(&CResourceFinder::onResourceFound, this, std::placeholders::_1)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); - ret = OC::OCPlatform::subscribePresence(presenceHandle, "coap://224.0.1.187", - "SoftSensorManager.Sensor", - std::bind(&CResourceFinder::presenceHandler, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3)); + ret = OC::OCPlatform::subscribePresence(m_multicastPresenceHandle, multicastPresenceURI.str(), + "SSManager.Sensor", OC_ALL, std::bind(&CResourceFinder::presenceHandler, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -139,23 +146,41 @@ CLEANUP: return res; } -SSMRESULT CResourceFinder::startObserveResource(IN ISSMResource *pSensor, IN IEvent *pEvent) +SSMRESULT CResourceFinder::stopResourceFinder() +{ + SSMRESULT res = SSM_E_FAIL; + OCStackResult ret = OC_STACK_ERROR; + + ret = OC::OCPlatform::unsubscribePresence(m_multicastPresenceHandle); + + if (ret != OC_STACK_OK) + SSM_CLEANUP_ASSERT(SSM_E_FAIL); + + m_multicastPresenceHandle = nullptr; + + res = SSM_S_OK; + +CLEANUP: + return res; +} + +SSMRESULT CResourceFinder::startObserveResource(ISSMResource *pSensor, IEvent *pEvent) { return m_mapResourceHandler[pSensor->name]->startObserve(pEvent); } -SSMRESULT CResourceFinder::stopObserveResource(IN ISSMResource *pSensor) +SSMRESULT CResourceFinder::stopObserveResource(ISSMResource *pSensor) { return m_mapResourceHandler[pSensor->name]->stopObserve(); } -void CResourceFinder::onExecute(IN void *pArg) +void CResourceFinder::onExecute(void *pArg) { SSMRESULT res = SSM_E_FAIL; OCStackResult ret = OC_STACK_ERROR; OC::QueryParamsMap queryParams; OICResourceHandler *pResourceHandler = NULL; - intptr_t *pMessage = reinterpret_cast(pArg); + intptr_t *pMessage = reinterpret_cast(pArg); std::shared_ptr< OC::OCResource > *pResource = NULL; OC::OCPlatform::OCPresenceHandle presenceHandle = NULL; @@ -178,9 +203,8 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResources[resourceHostAddress].push_back(resourceFullPath); - ret = pResource->get()->get(queryParams, - std::bind(&OICResourceHandler::onGetResourceProfile, pResourceHandler, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + ret = pResource->get()->get(queryParams, std::bind(&OICResourceHandler::onGetResourceProfile, + pResourceHandler, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -192,9 +216,8 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResourcePresenceHandles.end()) { ret = OC::OCPlatform::subscribePresence(presenceHandle, ((ISSMResource *)pMessage[1])->ip, - "SoftSensorManager.Sensor", - std::bind(&CResourceFinder::presenceHandler, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3)); + "SSManager.Sensor", OC_ALL, std::bind(&CResourceFinder::presenceHandler, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -202,7 +225,11 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResourcePresenceHandles[((ISSMResource *)pMessage[1])->ip] = presenceHandle; } - m_pResourceFinderEvent->onResourceFound((ISSMResource *) pMessage[1]); + m_pResourceFinderEvent->onResourceFound((ISSMResource *)pMessage[1]); + + if (ret != OC_STACK_OK) + SSM_CLEANUP_ASSERT(SSM_E_FAIL); + break; case RESOURCE_DISCOVER_UNINSTALL_RESOURCE: @@ -211,8 +238,8 @@ void CResourceFinder::onExecute(IN void *pArg) if (m_mapResourcePresenceHandles.find(((OICResourceHandler *)pMessage[1])->m_SSMResource.ip) != m_mapResourcePresenceHandles.end()) { - ret = OC::OCPlatform::unsubscribePresence( - m_mapResourcePresenceHandles[((OICResourceHandler *)pMessage[1])->m_SSMResource.ip]); + ret = OC::OCPlatform::unsubscribePresence(m_mapResourcePresenceHandles[(( + OICResourceHandler *)pMessage[1])->m_SSMResource.ip]); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -220,6 +247,7 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResourcePresenceHandles.erase(((OICResourceHandler *)pMessage[1])->m_SSMResource.ip); } + delete m_mapResourceHandler[((OICResourceHandler *)pMessage[1])->m_SSMResource.name]; m_mapResourceHandler.erase(((OICResourceHandler *) pMessage[1])->m_SSMResource.name); break; } @@ -228,7 +256,7 @@ CLEANUP: ; } -void CResourceFinder::onTerminate(IN void *pArg) +void CResourceFinder::onTerminate(void *pArg) { std::shared_ptr< OC::OCResource > *pResource = NULL; intptr_t *pMessage = (intptr_t *)pArg;