lib/reel/websocket.rb in reel-0.6.0.pre1 vs lib/reel/websocket.rb in reel-0.6.0.pre2
- 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
@@ -96,22 +96,22 @@
attr_reader :env, :url, :socket
def_delegators :socket, :write
- def initialize(info, socket)
- @url = info.url
+ RACK_HEADERS = {
+ 'Origin' => 'HTTP_ORIGIN',
+ 'Sec-WebSocket-Key' => 'HTTP_SEC_WEBSOCKET_KEY',
+ 'Sec-WebSocket-Key1' => 'HTTP_SEC_WEBSOCKET_KEY1',
+ 'Sec-WebSocket-Key2' => 'HTTP_SEC_WEBSOCKET_KEY2',
+ 'Sec-WebSocket-Extensions' => 'HTTP_SEC_WEBSOCKET_EXTENSIONS',
+ 'Sec-WebSocket-Protocol' => 'HTTP_SEC_WEBSOCKET_PROTOCOL',
+ 'Sec-WebSocket-Version' => 'HTTP_SEC_WEBSOCKET_VERSION'
+ }
- 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)
-
+ def initialize(info, socket)
+ @env, @url = {}, info.url
+ RACK_HEADERS.each {|k,v| @env[v] = info.headers[k]}
@socket = socket
end
end
class MessageStream