Sha256: 8a9288b35489a14c9ab29ea2a9ad9efc226dd5b877b32619af8b9d8eb58f1114
Contents?: true
Size: 1.91 KB
Versions: 6
Compression:
Stored size: 1.91 KB
Contents
module Faye class Transport::Http < Transport def self.usable?(dispatcher, endpoint, &callback) callback.call(URI === endpoint) end def encode(messages) Faye.to_json(messages) end def request(messages) content = encode(messages) params = build_params(content) request = create_request(params) request.callback do handle_response(messages, request.response) store_cookies(request.response_header['SET_COOKIE']) end request.errback do handle_error(messages) end request end private def build_params(content) params = { :head => { 'Content-Length' => content.bytesize, 'Content-Type' => 'application/json', 'Host' => @endpoint.host + (@endpoint.port ? ":#{@endpoint.port}" : '') }.merge(@dispatcher.headers), :body => content, :timeout => -1 # for em-http-request < 1.0 } cookie = get_cookies params[:head]['Cookie'] = cookie unless cookie == '' params end def create_request(params) version = EventMachine::HttpRequest::VERSION.split('.')[0].to_i options = {:inactivity_timeout => 0} if @proxy[:origin] uri = URI.parse(@proxy[:origin]) options[:proxy] = {:host => uri.host, :port => uri.port} if uri.user options[:proxy][:authorization] = [uri.user, uri.password] end end if version >= 1 client = EventMachine::HttpRequest.new(@endpoint.to_s, options) else client = EventMachine::HttpRequest.new(@endpoint.to_s) end client.post(params) end def handle_response(messages, response) replies = MultiJson.load(response) rescue nil if replies receive(replies) else handle_error(messages) end end end Transport.register 'long-polling', Transport::Http end
Version data entries
6 entries across 6 versions & 2 rubygems