class OnlineManager

Public Class Methods

new(config) click to toggle source
# File lib/online_manager.rb, line 12
def initialize(config)
  @config = config
  @online_users = {}
end
run(*args, &block) click to toggle source
# File lib/online_manager.rb, line 4
def self.run(*args, &block)
  new(*args, &block).run
end
setup(*args, &block) click to toggle source
# File lib/online_manager.rb, line 8
def self.setup(*args, &block)
  new(*args, &block).setup
end

Public Instance Methods

run() click to toggle source
# File lib/online_manager.rb, line 17
def run
  EM.run { setup }
end
setup() click to toggle source
# File lib/online_manager.rb, line 21
def setup
  @config.setup(&method(:seen))
end

Private Instance Methods

online?(id) click to toggle source
# File lib/online_manager.rb, line 45
def online?(id)
  @online_users.has_key?(id)
end
seen(id) click to toggle source
# File lib/online_manager.rb, line 27
def seen(id)
  @config.online(id) unless online?(id)

  time = Time.now
  @online_users[id] = time

  EM.add_timer(@config.timeout) do
    set_offline(id, time)
  end
end
set_offline(id, time) click to toggle source
# File lib/online_manager.rb, line 38
def set_offline(id, time)
  if @online_users[id] == time
    @online_users.delete(id)
    @config.offline(id)
  end
end