class Sinatra::CometIO::Client
Attributes
session[R]
timeout[RW]
url[R]
Public Class Methods
new(url)
click to toggle source
# File lib/sinatra/cometio/client.rb, line 16 def initialize(url) raise ArgumentError, "invalid URL (#{url})" unless url.kind_of? String and url =~ /^https?:\/\/.+/ @url = url @session = nil @running = false @timeout = 120 end
Public Instance Methods
close()
click to toggle source
# File lib/sinatra/cometio/client.rb, line 50 def close @running = false self.remove_listener :__session_id end
connect()
click to toggle source
# File lib/sinatra/cometio/client.rb, line 39 def connect return self if @running self.on :__session_id do |session| @session = session self.emit :connect, @session end @running = true get return self end
push(type, data)
click to toggle source
# File lib/sinatra/cometio/client.rb, line 24 def push(type, data) post_data = { :json => { :session => @session, :events => [{:type => type, :data => data}] }.to_json } begin res = HTTParty.post @url, :timeout => 10, :body => post_data emit :error, "CometIO push error" unless res.code == 200 rescue StandardError, Timeout::Error => e emit :error, "CometIO push error" end end
Private Instance Methods
get()
click to toggle source
# File lib/sinatra/cometio/client.rb, line 56 def get Thread.new do while @running do begin res = HTTParty.get "#{@url}?session=#{@session}", :timeout => @timeout unless res.code == 200 self.emit :error, "CometIO get error" sleep 10 next else data_arr = JSON.parse res.body data_arr = [data_arr] unless data_arr.kind_of? Array data_arr.each do |data| self.emit data['type'], data['data'] end next end rescue Timeout::Error, JSON::ParserError next rescue StandardError self.emit :error, "CometIO get error" sleep 10 next end end end end