NonblockingSocketSink(Client & client);
std::streamsize write(const char * s, std::streamsize n);
+
+ Client & client() const;
private:
Client & client_;
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();
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_;
+ };
}}}