Skip to content

Instantly share code, notes, and snippets.

@kenichi
Last active September 8, 2015 20:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenichi/9650741 to your computer and use it in GitHub Desktop.
Save kenichi/9650741 to your computer and use it in GitHub Desktop.
WebSocket::Driver client example with Celluloid::IO
require 'websocket/driver'
require 'socket'
require 'forwardable'
require 'celluloid/io'
class WSDTester
include Celluloid::IO
include Celluloid::Logger
extend Forwardable
def_delegator :@socket, :write
def_delegators :@driver, :text, :binary, :close
attr_reader :driver, :socket
def initialize addr, port, path
@addr, @port, @path = addr, port, path
ip = @addr
ip = Socket.getaddrinfo(@addr, 'http')[0][3] unless @addr =~ /\d+\.\d+\.\d+\.\d+/
@socket = TCPSocket.new ip, @port
@driver = WebSocket::Driver.client self
@driver.on :open do |e|
debug "open!"
end
@driver.on :message do |e|
debug "message: #{e.data}"
end
@driver.on :close do |e|
debug "close!"
end
end
def url
"ws://%s:%d%s" % [@addr, @port, @path]
end
# call this with async
#
def go
@driver.start
# async.ping
while msg = @socket.readpartial(4096)
@driver.parse msg
end
end
# def ping
# every(30){ @driver.ping }
# end
end
__END__
wsd = WSDTester.new '127.0.0.1', 4567, '/'
wsd.async.go
wsd.text 'hi there'
sleep 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment