lib/faye/adapters/rack_adapter.rb in faye-0.5.5 vs lib/faye/adapters/rack_adapter.rb in faye-0.6.0
- old
+ new
@@ -5,10 +5,12 @@
require Faye::ROOT + '/thin_extensions'
module Faye
class RackAdapter
+ include Logging
+
# Only supported under Thin
ASYNC_RESPONSE = [-1, {}, []].freeze
DEFAULT_ENDPOINT = '/bayeux'
SCRIPT_PATH = File.join(ROOT, 'faye-browser-min.js')
@@ -49,11 +51,10 @@
def call(env)
Faye.ensure_reactor_running!
request = Rack::Request.new(env)
unless request.path_info =~ @endpoint_re
- env['faye.client'] = get_client
return @app ? @app.call(env) :
[404, TYPE_TEXT, ["Sure you're not looking for #{@endpoint} ?"]]
end
if env['HTTP_UPGRADE'] == 'WebSocket'
@@ -66,28 +67,32 @@
begin
json_msg = message_from_request(request)
message = JSON.parse(json_msg)
jsonp = request.params['jsonp'] || JSONP_CALLBACK
- type = request.get? ? TYPE_SCRIPT : TYPE_JSON
+ head = request.get? ? TYPE_SCRIPT.dup : TYPE_JSON.dup
+ origin = request.env['HTTP_ORIGIN']
callback = env['async.callback']
body = DeferredBody.new
+ debug 'Received ?: ?', env['REQUEST_METHOD'], json_msg
@server.flush_connection(message) if request.get?
- callback.call [200, type, body]
+ head['Access-Control-Allow-Origin'] = origin if origin
+ callback.call [200, head, body]
@server.process(message, false) do |replies|
response = JSON.unparse(replies)
response = "#{ jsonp }(#{ response });" if request.get?
+ debug 'Returning ?', response
body.succeed(response)
end
ASYNC_RESPONSE
rescue
- [400, TYPE_TEXT, 'Bad request']
+ [400, TYPE_TEXT, ['Bad request']]
end
end
private
@@ -106,10 +111,12 @@
socket = Faye::WebSocket.new(request)
socket.onmessage = lambda do |message|
begin
message = JSON.parse(message.data)
- @server.process(message, socket) do |replies|
+ debug 'Received via WebSocket: ?', message
+ @server.process(message, false) do |replies|
+ debug 'Sending via WebSocket: ?', replies
socket.send(JSON.unparse(replies))
end
rescue
end
end