lib/reel/websocket.rb in reel-0.6.0 vs lib/reel/websocket.rb in reel-0.6.1

- old
+ new

@@ -1,21 +1,21 @@ require 'forwardable' require 'websocket/driver' -require 'rack' module Reel class WebSocket extend Forwardable include ConnectionMixin include RequestMixin attr_reader :socket def_delegators :@socket, :addr, :peeraddr + def_delegators :@driver, :ping def initialize(info, connection) - driver_env = DriverEnvironment.new(info, connection.socket) - + driver_env = DriverEnvironment.new(info, connection.socket) + @socket = connection.hijack_socket @request_info = info @driver = ::WebSocket::Driver.rack(driver_env) @driver.on(:close) do @@ -92,27 +92,27 @@ private class DriverEnvironment extend Forwardable - attr_reader :env, :url, :socket + attr_reader :env, :socket - def_delegators :socket, :write + def_delegator :@info, :url + def_delegator :@socket, :write - def initialize(info, socket) - @url = info.url + RACK_HEADERS = { + 'HTTP_ORIGIN' => 'Origin', + 'HTTP_SEC_WEBSOCKET_KEY' => 'Sec-WebSocket-Key', + 'HTTP_SEC_WEBSOCKET_KEY1' => 'Sec-WebSocket-Key1', + 'HTTP_SEC_WEBSOCKET_KEY2' => 'Sec-WebSocket-Key2', + 'HTTP_SEC_WEBSOCKET_EXTENSIONS' => 'Sec-WebSocket-Extensions', + 'HTTP_SEC_WEBSOCKET_PROTOCOL' => 'Sec-WebSocket-Protocol', + 'HTTP_SEC_WEBSOCKET_VERSION' => 'Sec-WebSocket-Version' + }.freeze - env_hash = Hash[info.headers.map { |key, value| ['HTTP_' + key.upcase.gsub('-','_'),value ] }] - - env_hash.merge!({ - :method => info.method, - :input => info.body.to_s, - 'REMOTE_ADDR' => info.remote_addr - }) - - @env = ::Rack::MockRequest.env_for(@url, env_hash) - - @socket = socket + def initialize(info, socket) + @info, @socket = info, socket + @env = Hash.new {|h,k| @info.headers[RACK_HEADERS[k]]} end end class MessageStream def initialize(socket, driver)