using namespace OIC::Service;
-DiscoverResourceUnit::DiscoverResourceUnit(const std::string & bundleId)
-: m_bundleId(bundleId)
+DiscoverResourceUnit::DiscoverResourceUnit(const std::string &bundleId)
+ : m_bundleId(bundleId)
{
pUpdatedCB = nullptr;
isStartedDiscovery = false;
- pDiscoveredCB = std::bind(&DiscoverResourceUnit::discoverdCB, this,
- std::placeholders::_1);
+
pUpdatedCBFromServer = std::bind(&DiscoverResourceUnit::onUpdate, this,
- std::placeholders::_1, std::placeholders::_2);
+ std::placeholders::_1, std::placeholders::_2);
}
DiscoverResourceUnit::~DiscoverResourceUnit()
{
+ pUpdatedCB = nullptr;
+ pUpdatedCBFromServer = nullptr;
+
m_vecRemoteResource.clear();
}
// TODO may be will changed active discovery
if (m_Uri.empty())
{
- RCSDiscoveryManager::getInstance()->discoverResourceByType(
- RCSAddress::multicast(), m_ResourceType, pDiscoveredCB);
+ pDiscoveredCB = std::bind(&DiscoverResourceUnit::discoverdCB, this, std::placeholders::_1,
+ std::string(""));
}
else
{
- RCSDiscoveryManager::getInstance()->discoverResourceByType(
- RCSAddress::multicast(), m_Uri, m_ResourceType, pDiscoveredCB);
+ pDiscoveredCB = std::bind(&DiscoverResourceUnit::discoverdCB, this, std::placeholders::_1, m_Uri);
}
+
+ discoveryTask = RCSDiscoveryManager::getInstance()->discoverResourceByType(
+ RCSAddress::multicast(), m_ResourceType, pDiscoveredCB);
}
- catch (InvalidParameterException &e)
+ catch (RCSInvalidParameterException &e)
{
// TODO Handle Exception
return;
isStartedDiscovery = true;
}
-void DiscoverResourceUnit::discoverdCB(RCSRemoteResourceObject::Ptr remoteObject)
+void DiscoverResourceUnit::discoverdCB(RCSRemoteResourceObject::Ptr remoteObject, std::string uri)
{
- if (!isAlreadyDiscoveredResource(remoteObject))
+ if (remoteObject && !isAlreadyDiscoveredResource(remoteObject))
{
RemoteResourceUnit::Ptr newDiscoveredResource =
- RemoteResourceUnit::createRemoteResourceInfo(remoteObject, pUpdatedCBFromServer);
+ RemoteResourceUnit::createRemoteResourceInfo(remoteObject, pUpdatedCBFromServer);
- m_vecRemoteResource.push_back(newDiscoveredResource);
-
- newDiscoveredResource->startMonitoring();
- newDiscoveredResource->startCaching();
+ if (uri.empty() || uri.compare(remoteObject->getUri()) == 0)
+ {
+ m_vecRemoteResource.push_back(newDiscoveredResource);
+ newDiscoveredResource->startMonitoring();
+ newDiscoveredResource->startCaching();
+ }
}
else
{
// Already Discovered Resource
}
-
}
void DiscoverResourceUnit::onUpdate(REMOTE_MSG msg, RCSRemoteResourceObject::Ptr updatedResource)
{
- if(msg == REMOTE_MSG::DATA_UPDATED)
+ if (msg == REMOTE_MSG::DATA_UPDATED)
{
if (updatedResource == nullptr)
{
{
updatedResource->getCachedAttribute(m_AttrubuteName);
}
- catch (InvalidKeyException &e)
+ catch (RCSInvalidKeyException &e)
{
// TODO Handle Exception
return;
}
std::vector<RCSResourceAttributes::Value> DiscoverResourceUnit::buildInputResourceData(
- RCSRemoteResourceObject::Ptr updatedResource)
+ RCSRemoteResourceObject::Ptr updatedResource)
{
(void)updatedResource;
std::vector<RCSResourceAttributes::Value> retVector = {};
- for(auto iter : m_vecRemoteResource)
+ for (auto iter : m_vecRemoteResource)
{
- if(iter->getRemoteResourceObject()->getCacheState() != CacheState::READY)
+ if (iter->getRemoteResourceObject()->getCacheState() != CacheState::READY)
{
continue;
}
try
{
RCSResourceAttributes::Value value =
- iter->getRemoteResourceObject()->getCachedAttribute(m_AttrubuteName);
+ iter->getRemoteResourceObject()->getCachedAttribute(m_AttrubuteName);
retVector.push_back(value);
}
- catch (InvalidKeyException &e)
+ catch (RCSInvalidKeyException &e)
{
// TODO Handle Exception
}
}
bool DiscoverResourceUnit::isAlreadyDiscoveredResource(
- RCSRemoteResourceObject::Ptr discoveredResource)
+ RCSRemoteResourceObject::Ptr discoveredResource)
{
for (auto iter : m_vecRemoteResource)
{
}
}
return false;
-}
+}
\ No newline at end of file