Sha256: fe5e041e1f02f76448ff37792eb3d6d33e7c3ef00489bbcd3ae1b0059be98149
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
require 'celluloid' require 'io/console' require 'pty' require 'socket' require 'terminfo' module Hokaido class Broadcast class Connection include Celluloid def initialize(host, port) @socket = TCPSocket.new(host, port) @socket.puts 'broadcast' end def send(data) @socket.write data end end class OutputHandler include Celluloid def initialize(ptyout, connection) @ptyout, @connection = ptyout, connection async.run end def run while chunk = @ptyout.readpartial(4096) $stdout.write chunk @connection.async.send chunk end rescue EOFError, Errno::EIO # do nothing ensure terminate end end class InputHandler include Celluloid def initialize(ptyin) @ptyin = ptyin async.run end def run while char = $stdin.getch @ptyin.putc char end terminate end end class Command include Celluloid def initialize(command, host, port) ptyout, ptyin, pid = PTY.getpty(command) connection = Connection.new_link(host, port) # FIXME: adjust on SIGWINCH adjust_screen_size ptyin OutputHandler.new_link ptyout, connection InputHandler.new_link ptyin async.wait_for_exit pid end def wait_for_exit(pid) Process.waitpid pid terminate end private def adjust_screen_size(ptyin) TermInfo.tiocswinsz ptyin, *TermInfo.screen_size end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hokaido-0.0.7 | lib/hokaido/broadcast.rb |