Console: Implement autocomplete
[senf.git] / Console / Server.hh
index 7a8b831..e33be2c 100644 (file)
@@ -85,9 +85,12 @@ namespace console {
                                         ///< Start server on given IPv4 address/port
         static Server & start(senf::INet6SocketAddress const & address);
                                         ///< Start server on given IPv6 address/port
-        void name(std::string const & name); ///< Set server name
+        Server & name(std::string const & name); ///< Set server name
                                         /**< This information is used in the prompt string. */
-
+        
+        void stop();                    ///< Stop the server
+                                        /**< All clients will be closed */
+        
     protected:
 
     private:
@@ -113,9 +116,6 @@ namespace console {
         Whenever a new client connects, a new instance of this class is created. This class shows a
         command prompt, receives the commands, parses them and then passes (using a CommandParser)
         and passes the commands to an Executor instance.
-
-        \fixme Fix Client::clientData implementation
-        \fixme Don't register a new ReadHelper every round
      */
     class Client
         : public senf::intrusive_refcount, 
@@ -135,17 +135,20 @@ namespace console {
         void stop();                    ///< Stop the client
                                         /**< This will close the client socket. */
 
+        std::string const & name() const;
+        ClientHandle handle() const;
+        std::ostream & stream();
+        std::string promptString() const;
+
+        static Client & get(std::ostream & os);
+
     protected:
         
     private:
         Client(Server & server, ClientHandle handle, std::string const & name);
 
-        std::string promptString() const;
-        ClientHandle handle() const;
-        detail::NonblockingSocketOStream & stream();
-
+        void translate(std::string & data);
         void handleInput(std::string input);
-
         virtual void v_write(boost::posix_time::ptime timestamp, std::string const & stream, 
                              std::string const & area, unsigned level, 
                              std::string const & message);
@@ -160,6 +163,7 @@ namespace console {
 
         friend class Server;
         friend class detail::ClientReader;
+        friend class detail::NonblockingSocketSink;
     };
 
 }}