From: "Dale Martenson said:
Does anyone know of a Telnet Server written purely in Ruby? It doesn't
have to be fully featured. I just need a remote shell for control of an
application that I am working on. Telnet is the preferred method since
the users of the system are used to using Telnet for network application
control and allows simple scripting via a socket.
I thought about writing my own using GServer and IO.popen, but before
embark on that I wanted to avoid re-inventing the wheel.
Hi,
For what it's worth... I have some ANSI/VT100 telnet libraries that support
partitioning the display into horizontal scrolling regions, and some reasonably
full featured line-editing handling insert, delete, scrolling long lines, command
history, scrollback buffers with PgUp/PgDn, etc...
Part of this project:
http://rubyforge.org/cgi-bin/viewvc.cgi/dorkbuster/dbcore/?root=dorkbuster
The relevant files would be:
ansi.rb
ansi-term.rb
term-keys.rb
windowed-term.rb
line-edit.rb
On the plus side, they have unit tests. And on the plus side, each module
is relatively loosely coupled... On the downside, the lowest level module,
buffered-io.rb, uses kind of a weird approach I developed back under
ruby 1.6.8 when nonblocking I/O wasn't well-supported on win32 ruby,
and so buffered-io was an experiment that technically works (it runs over
thirty servers now, for years with no problems); but it's more
complicated than it needs to be.
These days, instead of buffered-io, I'd have likely started with something
something like the EventMachine library JEGII mentioned in his reply
on this thread.
But anyway, that said, ansi-term only relies on a few methods of
the buffered-io object passed into it, mainly #send_nonblock,
#recv_nonblock, and #recv_ready? ... hmm, also #eof, #peeraddr,
#wait_recv_ready, #flush ... It might not be _too_ hard to adapt.
Well ... anyway, maybe the code might be of some use, even if
it could take some massaging to fit into a different I/O model.
The license for the source files mentioned here is LGPL preferably,
or Ruby's license if LGPL won't work for you.
Hope this helps,
Bill