// limitations under the License.
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
#include "RCSDiscoveryManager.h"
-#include "RCSRemoteResourceObject.h"
-#include "PrimitiveResource.h"
-
-#include "ScopeLogger.h"
-
-#define TAG PCF("RCSDiscoveryManager")
+#include "RCSDiscoveryManagerImpl.h"
-using namespace OIC::Service;
-
-namespace
+namespace OIC
{
- void findCallback(std::shared_ptr< PrimitiveResource > primitiveResource,
- RCSDiscoveryManager::ResourceDiscoveredCallback cb)
+ namespace Service
{
- SCOPE_LOG_F(DEBUG, TAG);
+ RCSDiscoveryManager::DiscoveryTask::DiscoveryTask(unsigned int id) :
+ m_id { id } {}
- if (!primitiveResource)
+ bool RCSDiscoveryManager::DiscoveryTask::isCanceled()
{
- OC_LOG(ERROR, TAG, "findCallback : primitiveResource is null.");
- return;
+ return m_id == RCSDiscoveryManagerImpl::INVALID_ID;
}
- cb(std::make_shared< RCSRemoteResourceObject >(primitiveResource));
- }
-}
+ void RCSDiscoveryManager::DiscoveryTask::cancel()
+ {
+ if (isCanceled())
+ return;
+
+ RCSDiscoveryManagerImpl::getInstance()->cancel(m_id);
+ m_id = RCSDiscoveryManagerImpl::INVALID_ID;
+ }
-namespace OIC
-{
- namespace Service
- {
RCSDiscoveryManager* RCSDiscoveryManager::getInstance()
{
static RCSDiscoveryManager instance;
return &instance;
}
- void RCSDiscoveryManager::discoverResource(const RCSAddress& address,
- ResourceDiscoveredCallback cb)
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResource(
+ const RCSAddress& address, ResourceDiscoveredCallback cb)
{
- discoverResourceByType(address, OC_RSRVD_WELL_KNOWN_URI, "", std::move(cb));
+ return discoverResourceByType(address, OC_RSRVD_WELL_KNOWN_URI,
+ RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE, std::move(cb));
}
- void RCSDiscoveryManager::discoverResource(const RCSAddress& address,
- const std::string& relativeURI, ResourceDiscoveredCallback cb)
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResource(
+ const RCSAddress& address, const std::string& relativeUri,
+ ResourceDiscoveredCallback cb)
{
- discoverResourceByType(address, relativeURI, "", std::move(cb));
+ return discoverResourceByType(address, relativeUri,
+ RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE, std::move(cb));
}
- void RCSDiscoveryManager::discoverResourceByType(const RCSAddress& address,
- const std::string& resourceType,
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResourceByType(
+ const RCSAddress& address, const std::string& resourceType,
ResourceDiscoveredCallback cb)
{
- discoverResourceByType(address, OC_RSRVD_WELL_KNOWN_URI, resourceType, std::move(cb));
+ return discoverResourceByType(address, OC_RSRVD_WELL_KNOWN_URI, resourceType,
+ std::move(cb));
}
- void RCSDiscoveryManager::discoverResourceByType(const RCSAddress& address,
- const std::string& relativeURI, const std::string& resourceType,
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResourceByTypes(
+ const RCSAddress& address, const std::vector< std::string >& resourceTypes,
ResourceDiscoveredCallback cb)
{
- if (!cb)
- {
- OC_LOG(ERROR, TAG, "discoverResourceByType NULL Callback");
- throw InvalidParameterException { "discoverResourceByType NULL Callback'" };
- }
- else
- {
- std::string resourceURI = relativeURI + "?rt=" + resourceType;
- OIC::Service::discoverResource(address, resourceURI,
- std::bind(findCallback, std::placeholders::_1, std::move(cb)));
- }
+ return discoverResourceByTypes(address, OC_RSRVD_WELL_KNOWN_URI, resourceTypes,
+ std::move(cb));
+ }
+
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResourceByType(
+ const RCSAddress& address, const std::string& relativeUri,
+ const std::string& resourceType, ResourceDiscoveredCallback cb)
+ {
+ return discoverResourceByTypes(address, relativeUri,
+ std::vector< std::string >{ resourceType }, std::move(cb));
+ }
+
+ RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResourceByTypes(
+ const RCSAddress& address, const std::string& relativeUri,
+ const std::vector< std::string >& resourceTypes, ResourceDiscoveredCallback cb)
+ {
+ return RCSDiscoveryManagerImpl::getInstance()->startDiscovery(address,
+ relativeUri.empty() ? OC_RSRVD_WELL_KNOWN_URI : relativeUri,
+ resourceTypes.empty() ? std::vector< std::string >{
+ RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE } : resourceTypes,
+ std::move(cb));
}
}
}