Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@kyledrake
Created February 26, 2013 19:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyledrake/5041317 to your computer and use it in GitHub Desktop.
Save kyledrake/5041317 to your computer and use it in GitHub Desktop.
debugging..
#!/usr/bin/env ruby
require 'celluloid/io'
require 'json'
require 'websocket'
class FileWriter
include Celluloid
def initialize
@fp = File.open('log.txt', 'w')
end
def write(s)
@fp.write "#{s}\n"
@fp.fsync
end
end
class WebsocketServer
include Celluloid::IO
def initialize(host, port)
puts "*** Starting echo server on #{host}:#{port}"
@server = TCPServer.new(host, port)
async.run
end
def finalize
@server.close if @server
end
def run
loop { async.handle_connection @server.accept }
end
def handle_connection(socket)
_, port, host = socket.peeraddr
puts "*** Received connection from #{host}:#{port}"
handshake = WebSocket::Handshake::Server.new
handshake << socket.readpartial(1024) until handshake.finished?
if !handshake.valid?
puts "Error: #{handshake.error}"
socket.close
return
end
socket.write handshake.to_s
loop {
frame_processor = WebSocket::Frame::Incoming::Server.new version: handshake.version
data = socket.readpartial(4096)
frame_processor << data
while frame = frame_processor.next
next unless frame.decoded?
resp = JSON.parse frame.to_s
LoggerActor.async.write resp.last['number']
end
}
rescue EOFError
puts "*** #{host}:#{port} disconnected"
socket.close
end
end
supervisor = WebsocketServer.supervise("127.0.0.1", 1234)
LoggerActor = FileWriter.new
trap("INT") { supervisor.terminate; exit }
sleep
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment