class Colossus::Engine::MemoryThreadSafe::ClientSessionStore

Represents all the different sessions of a user. It can find

the global status of the user given all the different status.

Attributes

last_status[R]
sessions[RW]
ttl[R]

Public Class Methods

new(ttl) click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 10
def initialize(ttl)
  @sessions = ThreadSafe::Cache.new do |hash, key|
    hash[key] = Colossus::Engine::MemoryThreadSafe::ClientSession.new
  end
  @last_status = DISCONNECTED
  @ttl         = ttl
end

Public Instance Methods

[](session_id) click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 41
def [](session_id)
  sessions[session_id]
end
[]=(session_id, session_status) click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 45
def []=(session_id, session_status)
  @last_status = status
  sessions[session_id].status = session_status
end
delete(session_id) click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 50
def delete(session_id)
  sessions.delete(session_id)
end
delete_expired_sessions() click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 54
def delete_expired_sessions
  session_keys_to_delete = []
  sessions.each_pair do |session_id, session|
    session_keys_to_delete << session_id if (session.last_seen + ttl) < Time.now
  end

  session_keys_to_delete.each { |session_id| sessions.delete(session_id) }
end
last_seen() click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 31
def last_seen
  sessions.values.reduce(Time.new(0)) do |memo, session|
    session.last_seen > memo ? session.last_seen : memo
  end
end
status() click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 18
def status
  sessions.values.reduce(DISCONNECTED) do |memo, session|
    case session.status
    when ACTIVE
      session.status
    when AWAY
      memo == ACTIVE ? memo : session.status
    else
      memo
    end
  end
end
status_changed?() click to toggle source
# File lib/colossus/engines/memory_thread_safe/client_session_store.rb, line 37
def status_changed?
  last_status != status
end