module Sinatra::RocketIO

Constants

VERSION

Public Class Methods

channels() click to toggle source
# File lib/sinatra-rocketio/channel.rb, line 4
def self.channels
  @@channels ||= {}
end
default_options() click to toggle source
# File lib/sinatra-rocketio/options.rb, line 12
def self.default_options
  {
    :comet     => [
                   (ENV["COMET"].to_s =~ /^(false|disable)$/i ? false : true),
                   lambda{|v| [true, false].include? v }
                  ],
    :websocket => [
                   (ENV["WEBSOCKET"].to_s =~ /^(false|disable)$/i ? false : true),
                   lambda{|v| [true, false].include? v }
                  ]
  }
end
javascript(*js_file_names) click to toggle source
# File lib/sinatra-rocketio/javascript.rb, line 4
def self.javascript(*js_file_names)
  js_file_names = ['rocketio.js', 'cometio.js', 'websocketio.js', 'event_emitter.js']
  js = ''
  js_file_names.each do |i|
    js += case i
          when 'cometio.js'
            options[:comet] ? Sinatra::CometIO.javascript('cometio.js') : ''
          when 'websocketio.js'
            options[:websocket] ? Sinatra::WebSocketIO.javascript('websocketio.js') : ''
          else
            j = ''
            File.open(File.expand_path "../js/#{i}", File.dirname(__FILE__)) do |f|
              j = f.read
            end
            j
          end + "\n"
  end
  js
end
options() click to toggle source
# File lib/sinatra-rocketio/options.rb, line 25
def self.options
  @@options ||= (
                 opts = {}
                 default_options.each do |k,v|
                   opts[k] = v[0]
                 end
                 opts
                 )
end
options=(opts) click to toggle source
# File lib/sinatra-rocketio/options.rb, line 35
def self.options=(opts)
  @@options = {}
  opts.each do |k,v|
    k = k.to_sym
    unless default_options.include? k
      STDERR.puts "!! Sinatra::RocketIO setting - \"#{k}\" is not valid key"
    else
      unless default_options[k][1].call(v)
        default = default_options[k][0]
        STDERR.puts "!! Sinatra::RocketIO setting - \"#{k} => #{v}\" is not valid. set default \"#{k} => #{default}\""
        @@options[k] = default
      else
        @@options[k] = v
      end
    end
  end
  default_options.each do |k, v|
    @@options[k] = v[0] unless @@options.include? k
  end
  @@options
end
push(type, data, opt={}) click to toggle source
# File lib/sinatra-rocketio/rocketio.rb, line 6
def self.push(type, data, opt={})
  if opt.include? :to and opt[:to].kind_of? Array
    opt[:to].each do |to|
      push type, data, :to => to
    end
  elsif opt.include? :channel
    channels.select{|session, channel|
      channel == opt[:channel].to_s
    }.each{|session, channel|
      push type, data, :to => session
    }
  else
    if options[:websocket]
      Sinatra::WebSocketIO.push type, data, opt
    end
    if options[:comet]
      Sinatra::CometIO.push type, data, opt
    end
  end
end
registered(app) click to toggle source
# File lib/sinatra-rocketio/application.rb, line 4
def self.registered(app)
  app.register Sinatra::CometIO
  app.register Sinatra::WebSocketIO
  app.helpers  Sinatra::RocketIO::Helpers
  app.get '/rocketio/settings' do
    content_type 'application/json'
    response["Access-Control-Allow-Origin"] = "*"
    @setting_json ||= (
                       setting = {}
                       setting[:websocket] = websocketio_url if Sinatra::RocketIO.options[:websocket]
                       setting[:comet] = cometio_url if Sinatra::RocketIO.options[:comet]
                       setting.to_json
                       )
  end
  app.get '/rocketio/rocketio.js' do
    content_type 'application/javascript'
    @js ||= ERB.new(Sinatra::RocketIO.javascript).result(binding)
  end
  EM::defer do
    while !EM::reactor_running? do
      sleep 1
    end
    Sinatra::WebSocketIO.start if Sinatra::RocketIO.options[:websocket]
    Sinatra::RocketIO.emit :start
  end
end
sessions() click to toggle source
# File lib/sinatra-rocketio/rocketio.rb, line 27
def self.sessions
  {
    :websocket => Sinatra::WebSocketIO.sessions.keys,
    :comet => Sinatra::CometIO.sessions.keys
  }
end

Public Instance Methods

rocketio() click to toggle source
# File lib/sinatra-rocketio/options.rb, line 8
def rocketio
  RocketIO.options
end
rocketio=(options) click to toggle source
# File lib/sinatra-rocketio/options.rb, line 4
def rocketio=(options)
  RocketIO.options = options
end