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