evennia/session_mgr.py

77 lines
1.8 KiB
Python

import time
import gameconf
"""
Session manager, handles connected players.
"""
# Our list of connected sessions.
session_list = []
def add_session(session):
"""
Adds a session to the session list.
"""
session_list.insert(0, session)
print 'Sessions active:', len(get_session_list())
def get_session_list():
"""
Lists the connected session objects.
"""
return session_list
def disconnect_all_sessions():
"""
Cleanly disconnect all of the connected sessions.
"""
for sess in get_session_list():
sess.handle_close()
def check_all_sessions():
"""
Check all currently connected sessions and see if any are dead.
"""
idle_timeout = int(gameconf.get_configvalue('idle_timeout'))
if len(session_list) <= 0:
return
if idle_timeout <= 0:
return
for sess in get_session_list():
if (time.time() - sess.cmd_last) > idle_timeout:
sess.msg("Idle timeout exceeded, disconnecting.")
sess.handle_close()
def remove_session(session):
"""
Removes a session from the session list.
"""
session_list.remove(session)
def session_from_object(targobject):
"""
Return the session object given a object (if there is one open).
session_list: (list) The server's session_list attribute.
targobject: (Object) The object to match.
"""
results = [prospect for prospect in session_list if prospect.get_pobject() == targobject]
if results:
return results[0]
else:
return False
def session_from_dbref(dbstring):
"""
Return the session object given a dbref (if there is one open).
dbstring: (int) The dbref number to match against.
"""
if is_dbref(dbstring):
results = [prospect for prospect in session_list if prospect.get_pobject().dbref_match(dbstring)]
if results:
return results[0]
else:
return False