#pragma once #include #include #include #include #include #include "Swiften/Base/String.h" #include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h" #include "Swiften/LinkLocal/DNSSD/DNSSDResolveServiceQuery.h" #include "Swiften/LinkLocal/DNSSD/DNSSDServiceID.h" #include "Swiften/LinkLocal/LinkLocalService.h" namespace Swift { class LinkLocalServiceBrowser { public: LinkLocalServiceBrowser(boost::shared_ptr querier); ~LinkLocalServiceBrowser(); std::vector getServices() const; boost::signal onServiceAdded; boost::signal onServiceChanged; boost::signal onServiceRemoved; private: void handleServiceAdded(const DNSSDServiceID&); void handleServiceRemoved(const DNSSDServiceID&); void handleServiceResolved(const DNSSDServiceID& service, const boost::optional& result); private: boost::shared_ptr querier; boost::shared_ptr browseQuery; typedef std::map > ResolveQueryMap; ResolveQueryMap resolveQueries; typedef std::map ServiceMap; ServiceMap services; }; }