2007-05-09 15:28:12 +00:00
|
|
|
import time
|
2006-12-22 01:42:24 +00:00
|
|
|
from session import PlayerSession
|
2007-05-09 15:28:12 +00:00
|
|
|
import gameconf
|
2006-12-22 01:40:40 +00:00
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Session manager, handles connected players.
|
|
|
|
|
"""
|
|
|
|
|
# Our list of connected sessions.
|
|
|
|
|
session_list = []
|
|
|
|
|
|
|
|
|
|
def new_session(server, conn, addr):
|
|
|
|
|
"""
|
|
|
|
|
Create and return a new session.
|
|
|
|
|
"""
|
|
|
|
|
session = PlayerSession(server, conn, addr)
|
|
|
|
|
session_list.insert(0, session)
|
|
|
|
|
return session
|
|
|
|
|
|
|
|
|
|
def get_session_list():
|
|
|
|
|
"""
|
|
|
|
|
Lists the connected session objects.
|
|
|
|
|
"""
|
|
|
|
|
return session_list
|
2007-04-25 20:11:29 +00:00
|
|
|
|
|
|
|
|
def check_all_sessions():
|
|
|
|
|
"""
|
|
|
|
|
Check all currently connected sessions and see if any are dead.
|
|
|
|
|
"""
|
2007-05-09 15:28:12 +00:00
|
|
|
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()
|
2007-04-26 20:32:56 +00:00
|
|
|
## This doesn't seem to provide an accurate indication of timed out
|
|
|
|
|
## sessions.
|
|
|
|
|
#if not sess.writable() or not sess.readable():
|
|
|
|
|
# print 'Problematic Session:'
|
|
|
|
|
# print 'Readable ', sess.readable()
|
|
|
|
|
# print 'Writable ', sess.writable()
|
2007-04-25 20:11:29 +00:00
|
|
|
|
2006-12-22 01:40:40 +00:00
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
"""
|
2007-01-04 01:55:01 +00:00
|
|
|
results = [prospect for prospect in session_list if prospect.get_pobject() == targobject]
|
2006-12-22 01:40:40 +00:00
|
|
|
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
|