X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fresource-encapsulation%2Fsrc%2FresourceClient%2FRCSDiscoveryManagerImpl.h;h=0fea0cd4545cc617bd46fc679ead17f30a2e012a;hb=390866079e285d2c74918432c0d597d5da52f8a0;hp=5f3dabc0021be1626b56ce79385745b9dcde917b;hpb=3e9402ad71cb3e93266a77796f44d17bab9853fd;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.h b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.h old mode 100644 new mode 100755 index 5f3dabc..0fea0cd --- a/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.h +++ b/service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.h @@ -31,23 +31,19 @@ #include #include -#include #include #include +#include +#include "RCSAddress.h" #include "RCSDiscoveryManager.h" #include "ExpiryTimer.h" #include "PrimitiveResource.h" -#include "RCSRemoteResourceObject.h" namespace OIC { namespace Service { - class RCSDiscoveryManager; - class PrimitiveResource; - class RCSAddress; - /** * The class contains discovery request information * @@ -56,55 +52,44 @@ namespace OIC class DiscoveryRequestInfo { public: - DiscoveryRequestInfo(const std::string &, const std::string &, - const std::string &, DiscoverCallback); + DiscoveryRequestInfo(const RCSAddress&, const std::string&, + const std::vector< std::string >&, DiscoverCallback); + + public: + void discover() const; + bool isKnownResource(const std::shared_ptr< PrimitiveResource >&) const; + void addKnownResource(const std::shared_ptr< PrimitiveResource >&); + bool isMatchedAddress(const std::string&) const; private: - std::string m_address; + RCSAddress m_address; std::string m_relativeUri; - std::string m_resourceType; - std::list m_receivedIds; - DiscoverCallback m_discoverCB; - public: - void discoverRequest() const; - bool isKnownResource(const std::shared_ptr&); - bool isMatchingAddress(const std::string&) const; + std::vector< std::string > m_resourceTypes; + std::unordered_set< std::string > m_knownResourceIds; + DiscoverCallback m_discoverCb; }; - /** * The class contains the resource discovery and management requests methods. */ class RCSDiscoveryManagerImpl { - static unsigned int s_uniqueId; - public: /* - * Typedef for callback of requesting presence API - * - * @see requestMulticastPresence - */ - typedef std::function PresenceCallback; - - /* * Typedef for discovery request ID * * @note This is generated for each discovery request */ typedef unsigned int ID; + constexpr static char const* ALL_RESOURCE_TYPE = ""; public: - /* - * @return Returns RCSDiscoveryManagerImpl instance. - */ static RCSDiscoveryManagerImpl* getInstance(); /** - * Starting discovery of resource + * Start discovery of resource * * @return DiscoverTask pointer * @@ -115,30 +100,28 @@ namespace OIC * * @throws InvalidParameterException If cb is empty * - * @note If relativeURI is empty, will be discovered after be changed into "OC_RSRVD_WELL_KNOWN_URI" + * @note If relativeURI is empty, will be discovered after be changed into + * "OC_RSRVD_WELL_KNOWN_URI" * @note If resourceType is empty, will be discovered all resources in network * * @see RCSAddress * @see RCSDiscoveryManager */ - std::unique_ptr startDiscovery(const RCSAddress& address, - const std::string& relativeURI,const std::string& resourceType, + RCSDiscoveryManager::DiscoveryTask::Ptr startDiscovery(const RCSAddress& address, + const std::string& relativeURI, + const std::vector< std::string >& resourceTypes, RCSDiscoveryManager::ResourceDiscoveredCallback cb); void cancel(ID); - bool isCanceled(ID); private: RCSDiscoveryManagerImpl(); ~RCSDiscoveryManagerImpl() = default; - /** - * Requesting presence by multicast - */ - void requestMulticastPresence(); + void subscribePresenceWithMulticast(); /** - * Checking duplicated callback and invoking callback when resource is discovered + * Check duplicated callback and invoke callback when resource is discovered * * @param resource A pointer of discovered resource * @param discoverID The ID of discovery request @@ -146,36 +129,36 @@ namespace OIC * * @see PrimitiveResource */ - void onResourceFound(std::shared_ptr resource, ID discoveryId, + void onResourceFound(std::shared_ptr< PrimitiveResource > resource, ID discoveryId, const RCSDiscoveryManager::ResourceDiscoveredCallback& cb); /** - * Discovering resource on all requests and posting timer when timer is expired + * Discover resource on all requests and posting timer when timer is expired */ void onPolling(); /** - * Discovering resource on all requests when supporting presence function resource enter into network - * - * @param ret Not used in this class - * @param seq Not used in this class - * @param address A address of supporting presence function resource + * Discover resource on all requests when supporting presence function resource + * enter into network */ - void onPresence(OCStackResult ret, const unsigned int seq, const std::string& address); + void onPresence(OCStackResult, const unsigned int seq, const std::string& address); /** - * Creating unique id + * Create unique id * * @return Returns the id */ - ID createId(); + ID createId() const; public: - ExpiryTimer m_timer; + constexpr static ID INVALID_ID = 0; private: - std::unordered_map m_discoveryMap; - std::mutex m_mutex; + ExpiryTimer m_timer; + + std::unordered_map< ID, DiscoveryRequestInfo > m_discoveryMap; + + mutable std::mutex m_mutex; }; } }