module Jellyfish::WebSocket

Attributes

parser[R]
sock[R]

Public Instance Methods

switch_protocol(&block) click to toggle source
# File lib/jellyfish/websocket.rb, line 15
    def switch_protocol &block
      key = env['HTTP_SEC_WEBSOCKET_KEY']
      accept = [Digest::SHA1.digest("#{key}#{GUID}")].pack('m0')
      @sock = env['rack.hijack'].call
      sock.binmode
      sock.write(<<-HTTP)
HTTP/1.1 101 Switching Protocols\r
Upgrade: websocket\r
Connection: Upgrade\r
Sec-WebSocket-Accept: #{accept}\r
\r
      HTTP
      @parser = Parser.new
      parser.on_message(&block)
    end
ws_close() click to toggle source
# File lib/jellyfish/websocket.rb, line 47
def ws_close
  sock << Message.close.to_data
  sock.close
end
ws_read(bytes=8192) click to toggle source
# File lib/jellyfish/websocket.rb, line 37
def ws_read bytes=8192
  parser << sock.readpartial(bytes)
rescue EOFError
  sock.close
end
ws_start() click to toggle source
# File lib/jellyfish/websocket.rb, line 31
def ws_start
  while !sock.closed? && IO.select([sock]) do
    ws_read
  end
end
ws_write(msg) click to toggle source
# File lib/jellyfish/websocket.rb, line 43
def ws_write msg
  sock << Message.new(msg).to_data
end