From: “Dale M.” [email protected]
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