Scheduler: Implement Timer helper
[senf.git] / Console / Server.ih
index bffdacb..d31f713 100644 (file)
@@ -55,6 +55,8 @@ namespace detail {
 
         NonblockingSocketSink(Client & client);
         std::streamsize write(const char * s, std::streamsize n);
+
+        Client & client() const;
         
     private:
         Client & client_;
@@ -78,13 +80,19 @@ namespace detail {
 
         virtual ~ClientReader() = 0;
 
+        // Called by subclasses to get information from the Client
+
         Client & client() const;
         std::string promptString() const;
         ClientHandle handle() const;
         std::ostream & stream() const;
+
+        // Called by subclasses to perform actions in the Client
+
         void stopClient();
-        
-        void handleInput(std::string const & input) const;
+        std::string::size_type handleInput(std::string const & input, bool incremental=false) const;
+
+        // Called by the Client
 
         void disablePrompt();
         void enablePrompt();
@@ -124,6 +132,28 @@ namespace detail {
         unsigned promptLen_;
         bool promptActive_;
     };
+
+    /** \brief Internal: Primitive ClientReader implementation
+        
+        This implementation uses the cooked telnet mode to read lines from the console. It does not
+        support explicit line editing or any other advanced features.
+     */
+    class NoninteractiveClientReader
+        : public ClientReader
+    {
+    public:
+        NoninteractiveClientReader(Client & client);
+
+    private:
+        virtual void v_disablePrompt();
+        virtual void v_enablePrompt();
+        virtual void v_translate(std::string & data);
+
+        void newData(senf::Scheduler::EventId event);
+
+        SchedulerBinding binding_;
+        std::string buffer_;
+    };
     
 }}}