]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Service.hh
constructors should be explicit
[chaz/yoink] / src / Moof / Service.hh
index 7c5e6b7b7b440ad4ba9f14fb6ec519eb230633c6..570a2309e270cb235a7abe7e1b8819d12a7264a6 100644 (file)
@@ -9,10 +9,15 @@
 *
 **************************************************************************/
 
+/**
+ * \file Service.hh
+ * Classes for publishing and finding network services.
+ */
+
 #ifndef _MOOF_SERVICE_HH_
 #define _MOOF_SERVICE_HH_
 
-#include <vector>
+#include <map>
 
 #include <Moof/Math.hh>
 #include <Moof/Socket.hh>
@@ -29,37 +34,89 @@ 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& 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& text);
+       Service(const SocketAddress& 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 SocketAddress& address() const;
+       const SocketAddress& address() const
+       {
+               return mAddress;
+       }
 
        /**
-        * Get the service information.
-        * \return The service information as a string.
+        * Get the type of the service.
+        * \return The service type.
         */
-       const std::string& text() const;
+       const std::string& type() const
+       {
+               return mType;
+       }
 
+       /**
+        * Get the service name.
+        * \return The service name.
+        */
+       const std::string& name() const
+       {
+               return mName;
+       }
 
        /**
-        * Publish the service on the network.
+        * Get the service information.
+        * \return The service information as a string.
         */
-       void publish();
+       const std::string& text() const
+       {
+               return mText;
+       }
 
-       void update(Scalar t, Scalar dt);
+
+       ~Service();
 
 
 private:
 
+       int handlePacket(SocketMultiplexer& mux,
+                                        Packet& packet,
+                                        const SocketAddress& address);
+
        SocketAddress   mAddress;
+       std::string             mType;
+       std::string             mName;
        std::string             mText;
 };
 
@@ -68,12 +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);
 
-       void update(Scalar t, Scalar dt);
+       /**
+        * 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<Service>& services() const
+       const std::map<std::string,Service>& services() const
        {
                return mServices;
        }
@@ -81,7 +149,12 @@ public:
 
 private:
 
-       std::vector<Service> mServices;
+       int handlePacket(SocketMultiplexer& mux,
+                                        Packet& packet,
+                                        const SocketAddress& address);
+
+       std::string                                             mType;
+       std::map<std::string,Service>   mServices;
 };
 
 
This page took 0.021321 seconds and 4 git commands to generate.