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)