#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////////////////////////////////////////