Utils/Termlib: Add some logging
[senf.git] / Utils / Termlib / TelnetTerminal.hh
index 0514c63..650ce1f 100644 (file)
 #define HH_SENF_Utils_Termlib_TelnetTerminal_ 1
 
 // Custom includes
-#include <senf/Scheduler/TimerEvent.hh>
-#include <senf/Scheduler/ClockService.hh>
 #include "Telnet.hh"
-#include "Terminfo.hh"
+#include "AbstractTerminal.hh"
+#include "../Logger.hh"
 
 //#include "TelnetTerminal.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
 namespace senf {
 namespace term {
 
+    /** \brief AbstractTerminal interface implementation based on telnet
+
+        This class provides a telnet server implementation implementing the AbstractTerminal
+        interface. 
+
+        TelnetTerminal provides one additional callback which needs to be implemented in a derived
+        class: v_setupFailed(). This member will be called, when not all required telnet options are
+        supported by the telnet client. In this case, the communication will be switched back into
+        line-oriented mode and v_setupFailed() is called.
+
+        \ingroup telnet_group
+     */
     class TelnetTerminal
         : public telnethandler::TerminalType,
-          public telnethandler::NAWS
+          public telnethandler::NAWS,
+          public AbstractTerminal
     {
+        SENF_LOG_CLASS_AREA();
     public:
-        typedef KeyParser::keycode_t keycode_t;
-
-        static unsigned const DEFAULT_KEY_TIMEOUT_MS = 500u;
-
         TelnetTerminal();
 
+        ///\name AbstractTerminal interface implementation
+        ///\{
+        virtual void setCallbacks(AbstractTerminal::Callbacks & cb);
+        virtual std::string terminalType();
+        virtual unsigned width();
+        virtual unsigned height();
+        virtual void write(char ch);
+        ///\}
+
     protected:
-        virtual void v_setupComplete();
 
+#   ifndef DOXYGEN
     private:
-        virtual void v_keyReceived(keycode_t key) = 0;
+#   endif
+        virtual void v_setupFailed() = 0; ///< Called when the telnet setup has failed
 
-        virtual void v_charReceived(char c);
-        void keySequenceTimeout();
-        void processKeys();
+    private:
+        virtual void v_setupComplete();
+        virtual void v_charReceived(char ch);
+        virtual void v_windowSizeChanged();
 
-        senf::term::Terminfo tifo_;
-        senf::term::KeyParser keyParser_;
-        std::string inputBuffer_;
-        senf::ClockService::clock_type keyTimeout_;
-        senf::scheduler::TimerEvent timer_;
+        AbstractTerminal::Callbacks * callbacks_;
+        bool setupFailed_;
     };
+
 }}
 
 ///////////////////////////////hh.e////////////////////////////////////////