Sha256: 8635be34208b66e1ccc40cdeb957d7c2bb96ab3795d32a0e5c3ebed262e64bfb
Contents?: true
Size: 1.74 KB
Versions: 2
Compression:
Stored size: 1.74 KB
Contents
module Sinatra::CometIO def cometio=(options) CometIO.options = options end def cometio CometIO.options end helpers do def cometio_js "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}#{env['SCRIPT_NAME']}/cometio/cometio.js" end def cometio_url "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}#{env['SCRIPT_NAME']}/cometio/io" end end get '/cometio/cometio.js' do content_type 'application/javascript' @js ||= ( js = '' Dir.glob(File.expand_path '../js/*.js', File.dirname(__FILE__)).each do |i| File.open(i) do |f| js += f.read end end ERB.new(js).result(binding) ) end get '/cometio/io' do stream :keep_open do |s| session = params[:session].to_s.empty? ? CometIO.create_session(request.ip) : params[:session] CometIO.sessions[session][:stream] = s CometIO.sessions[session][:last] = Time.now CometIO.emit :connect, session if params[:session].to_s.empty? unless CometIO.sessions[session][:queue].empty? begin s.write CometIO.sessions[session][:queue].shift.to_json s.flush s.close rescue s.close end end EM::add_timer CometIO.options[:timeout] do begin s.write({:type => :__heartbeat, :data => {:time => Time.now.to_i}}.to_json) s.flush s.close rescue s.close end end end end post '/cometio/io' do type = params[:type] data = params[:data] from = params[:session] CometIO.emit type, data, from if type.to_s.size > 0 {:session => from, :type => type, :data => data}.to_json end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sinatra-cometio-0.1.8 | lib/sinatra-cometio/application.rb |
sinatra-cometio-0.1.7 | lib/sinatra-cometio/application.rb |