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