Sha256: b6c46ae7bb278669e76c99fda458d46ab30a73236d223f0a2d160500a0586bac
Contents?: true
Size: 1.01 KB
Versions: 7
Compression:
Stored size: 1.01 KB
Contents
require 'jellyfish' require 'websocket_parser' require 'digest/sha1' module Jellyfish module WebSocket ::WebSocket.constants.each do |const| const_set(const, ::WebSocket.const_get(const)) end attr_reader :sock, :parser 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 def ws_start while !sock.closed? && IO.select([sock]) do ws_read end end def ws_read bytes=8192 parser << sock.readpartial(bytes) rescue EOFError sock.close end def ws_write msg sock << Message.new(msg).to_data end def ws_close sock << Message.close.to_data sock.close end end end
Version data entries
7 entries across 7 versions & 1 rubygems