X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FTermlib%2FtelnetServer.cc;h=a02711f75bc648c65a3102dabe263e0791f1feb6;hb=844c117cb04bc73a5b920c2c49efbf14515da3e2;hp=da4c15a3f4c299c7f7c4314cd2fcf990708a5d76;hpb=45f1f7608c81c1d5e417c97a3e9273e0282d6a0d;p=senf.git diff --git a/Utils/Termlib/telnetServer.cc b/Utils/Termlib/telnetServer.cc index da4c15a..a02711f 100644 --- a/Utils/Termlib/telnetServer.cc +++ b/Utils/Termlib/telnetServer.cc @@ -28,10 +28,11 @@ // Custom includes #include -#include "TelnetTerminal.hh" #include "../../Scheduler/Scheduler.hh" #include "../Logger.hh" #include "../../Socket/Protocols/INet.hh" +#include "TelnetTerminal.hh" +#include "Editor.hh" //#include "telnetServer.mpp" #define prefix_ @@ -39,34 +40,64 @@ namespace { - class MyTelnet : public senf::term::TelnetTerminal + class MyEditor + : public senf::term::BaseEditor { public: - explicit MyTelnet(Handle handle) : senf::term::BaseTelnetProtocol(handle) {} - + MyEditor(senf::term::AbstractTerminal & terminal) + : BaseEditor(terminal) {} + private: virtual void v_keyReceived(keycode_t key) { SENF_LOG(("Key " << senf::term::KeyParser::describe(key))); + if (key >= ' ' && key < 256) + insertChar(key); + else + switch (key) { + case '\r': + newline(); + break; + case senf::term::KeyParser::Left: + { + unsigned c (currentColumn()); + if (c > 0) + toColumn(c-1); + break; + } + case senf::term::KeyParser::Backspace: + { + unsigned c (currentColumn()); + if (c > 0) { + toColumn(c-1); + deleteChar(); + } + break; + } + case senf::term::KeyParser::Delete: + deleteChar(); + break; + } } + }; + + class MyTelnet + : public senf::term::TelnetTerminal + { + public: + explicit MyTelnet(Handle handle) + : senf::term::BaseTelnetProtocol(handle), + editor_(*this) {} + virtual void v_eof() { SENF_LOG(("EOF")); delete this; } - virtual void v_setupComplete() - { - TelnetTerminal::v_setupComplete(); - SENF_LOG(("Terminal type is '" << terminalType() << "', window size is " - << width() << "x" << height())); - } - - virtual void v_windowSizeChanged() - { - SENF_LOG(("New window size: " << width() << "x" << height())); - } + private: + MyEditor editor_; }; typedef senf::TCPv4ServerSocketHandle ServerHandle;