X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FService.hh;h=570a2309e270cb235a7abe7e1b8819d12a7264a6;hp=77cee183f9b3346c8563dbafff75105b00e9ee76;hb=de6942ee1401fea16a171610de779ef0a8c57e38;hpb=3fd6f206f0e64122b7cb289907a1a780b6ed2dc9 diff --git a/src/Moof/Service.hh b/src/Moof/Service.hh index 77cee18..570a230 100644 --- a/src/Moof/Service.hh +++ b/src/Moof/Service.hh @@ -17,7 +17,7 @@ #ifndef _MOOF_SERVICE_HH_ #define _MOOF_SERVICE_HH_ -#include +#include #include #include @@ -34,18 +34,37 @@ class Service public: /** - * Construct a network service. + * Construct a network service with an explicit type. * \param address The address of the host. + * \param type The type of service. + * \param name The service name. * \param text The service information. */ - Service(const SocketAddress& address, const std::string& text); + Service(const SocketAddress& address, + const std::string& type, + const std::string& name, + const std::string& text); + + /** + * Construct a network service. The type of service will be inferred + * from the address. + * \param address The address of the host. + * \param name The service name. + * \param text The service information. + */ + Service(const SocketAddress& address, + const std::string& name, + const std::string& text); /** - * Publish the service on the local network. + * Publish the service on the network. */ void publish(); + /** + * Stop publishing the service on the network. + */ void stop(); @@ -58,6 +77,24 @@ public: return mAddress; } + /** + * Get the type of the service. + * \return The service type. + */ + const std::string& type() const + { + return mType; + } + + /** + * Get the service name. + * \return The service name. + */ + const std::string& name() const + { + return mName; + } + /** * Get the service information. * \return The service information as a string. @@ -68,13 +105,18 @@ public: } + ~Service(); + + private: - int handlePacket(SocketMultiplexer& sock, + int handlePacket(SocketMultiplexer& mux, Packet& packet, const SocketAddress& address); SocketAddress mAddress; + std::string mType; + std::string mName; std::string mText; }; @@ -83,10 +125,23 @@ class ServiceFinder { public: - ServiceFinder(const std::string& service, int type = SOCK_STREAM); + /** + * Construct a service finder to find services of the same type as an + * address. + * \address The address. + */ + explicit ServiceFinder(const SocketAddress& address); + + /** + * Construct a service finder to find services of a certain type. + * \param type The type of the service. + * \param sockType The type of socket. + */ + explicit ServiceFinder(const std::string& type, + int sockType = SOCK_STREAM); - const std::vector& services() const + const std::map& services() const { return mServices; } @@ -94,12 +149,12 @@ public: private: - int handlePacket(SocketMultiplexer& sock, + int handlePacket(SocketMultiplexer& mux, Packet& packet, const SocketAddress& address); - std::string mService; - std::vector mServices; + std::string mType; + std::map mServices; };