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