/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_SERVICE_HH_ #define _MOOF_SERVICE_HH_ /** * \file service.hh * Classes for publishing and finding network services. */ #include #include #include namespace moof { /** * Class representing a network service. */ class service { public: /** * 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 socket::address& 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 socket::address& address, const std::string& name, const std::string& text); /** * Publish the service on the network. */ void publish(); /** * Stop publishing the service on the network. */ void stop(); /** * Get the host address. * \return The address. */ const socket::address& address() const { return address_; } /** * Get the type of the service. * \return The service type. */ const std::string& type() const { return type_; } /** * Get the service name. * \return The service name. */ const std::string& name() const { return name_; } /** * Get the service information. * \return The service information as a string. */ const std::string& text() const { return text_; } ~service(); private: int handle_packet(socket_multiplexer& mux, packet& packet, const socket::address& address); socket::address address_; std::string type_; std::string name_; std::string text_; }; class service_finder { public: /** * Construct a service finder to find services of the same type as an * address. * \address The address. */ explicit service_finder(const socket::address& 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 service_finder(const std::string& type, int sockType = SOCK_STREAM); const std::map& services() const { return services_; } private: int handle_packet(socket_multiplexer& mux, packet& packet, const socket::address& address); std::string type_; std::map services_; }; } // namespace moof #endif // _MOOF_SERVICE_HH_