class Moonrelay::Cli::ProxyCommand
Public Instance Methods
execute()
click to toggle source
# File lib/moonrelay/cli/proxy_command.rb, line 13 def execute downstream = Queue.new upstream = Queue.new proxy_server = TCPServer.open("0.0.0.0", 2000) Thread.new do loop do c = proxy_server.accept # Wait for a client to connect puts "conn" t = Thread.new do loop do m = downstream.pop print m c.write m end end while data = c.recv(81920) do break if data.empty? upstream << data end puts "disconnect" t.kill end end EM.run { ws = Faye::WebSocket::Client.new("ws://#{server}/#{channel}") ws.on :open do |event| puts "ready" end ws.on :message do |event| p [:message, event.data.class, event.data] if event.data.is_a? Array downstream.push event.data.pack("C*") else downstream.push event.data end end ws.on :close do |event| p [:close, event.code, event.reason] ws = nil end Thread.new do loop do m = upstream.pop # TODO puts "" puts "----" p ["->", m.encoding, m] if m.encoding.name == "ASCII-8BIT" ws.send m.unpack("C*") else ws.send m end # puts m.unpack("C*") # ws.send m # .unpack("C*") # else # ws.send m # end end end } end