From 9f558f3b240079160cf95b545b33c85f24fdab40 Mon Sep 17 00:00:00 2001 From: Greg Taylor Date: Tue, 5 Dec 2006 22:06:50 +0000 Subject: [PATCH] Addition of a few common commands. --- evennia/trunk/commands_general.py | 22 ++++++++++++++-- evennia/trunk/commands_staff.py | 11 ++++++++ evennia/trunk/functions_general.py | 17 ++++++++++++ evennia/trunk/server.py | 42 +++++++++++++++--------------- evennia/trunk/sessions.py | 2 +- 5 files changed, 70 insertions(+), 24 deletions(-) diff --git a/evennia/trunk/commands_general.py b/evennia/trunk/commands_general.py index 2cf2cec8b5..e59ca9e8e3 100644 --- a/evennia/trunk/commands_general.py +++ b/evennia/trunk/commands_general.py @@ -79,7 +79,7 @@ def do_who(cdat): """ Generic WHO command. """ - session_list = cdat['server'].session_list + session_list = cdat['server'].get_session_list() session = cdat['session'] retval = "Player Name On For Idle Room Cmds Host\n\r" @@ -109,7 +109,7 @@ def do_say(cdat): """ Room-based speech command. """ - session_list = cdat['server'].session_list + session_list = cdat['server'].get_session_list() session = cdat['session'] speech = ''.join(cdat['uinput']['splitted'][1:]) players_present = [player for player in session_list if player.pobject.location == session.pobject.location and player != session] @@ -129,3 +129,21 @@ def do_version(cdat): retval += "Evennia %s\n\r" % (settings.EVENNIA_VERSION,) retval += "-"*50 session.msg(retval) + +def do_time(cdat): + """ + Server local time. + """ + session = cdat['session'] + session.msg('Current server time : %s' % (time.strftime('%a %b %d %H:%M %Y (%Z)', time.localtime(),))) + +def do_uptime(cdat): + """ + Server uptime and stats. + """ + session = cdat['session'] + server = cdat['server'] + start_delta = time.time() - server.start_time + session.msg('Current server time : %s' % (time.strftime('%a %b %d %H:%M %Y (%Z)', time.localtime(),))) + session.msg('Server start time : %s' % (time.strftime('%a %b %d %H:%M %Y', time.localtime(server.start_time),))) + session.msg('Server uptime : %s' % functions_general.time_format(start_delta, style=2)) diff --git a/evennia/trunk/commands_staff.py b/evennia/trunk/commands_staff.py index bcab08f66c..6c203e1f6b 100644 --- a/evennia/trunk/commands_staff.py +++ b/evennia/trunk/commands_staff.py @@ -132,3 +132,14 @@ def do_find(cdat): session.msg("%d matches returned." % (len(results),)) else: session.msg("No name matches found for: %s" % (searchstring,)) + +def do_shutdown(cdat): + """ + Shut the server down gracefully. + """ + session = cdat['session'] + server = cdat['server'] + + session.msg('Shutting down...') + print 'Server shutdown by %s(#%d)' % (session.name, session.pobject.id,) + server.shutdown() diff --git a/evennia/trunk/functions_general.py b/evennia/trunk/functions_general.py index 402b47e05f..622d15c16c 100644 --- a/evennia/trunk/functions_general.py +++ b/evennia/trunk/functions_general.py @@ -61,3 +61,20 @@ def time_format(seconds, style=0): retval = '%s%s%s%s' % (days_str, hours_str, minutes_str, seconds_str,) return retval + +def announce_all(server, message, with_ann_prefix=True, with_nl=True): + """ + Announces something to all connected players. + """ + if with_ann_prefix: + prefix = 'Announcement:' + else: + prefix = '' + + if with_nl: + newline = '\r\n' + else: + newline = '' + + for session in server.get_session_list(): + session.msg_no_nl('%s %s%s' % (prefix, message,newline,)) diff --git a/evennia/trunk/server.py b/evennia/trunk/server.py index adedcc3327..7c5073373b 100755 --- a/evennia/trunk/server.py +++ b/evennia/trunk/server.py @@ -6,9 +6,10 @@ from django.db import models from apps.config.models import ConfigValue, CommandAlias from apps.objects.models import Object, Attribute from django.contrib.auth.models import User -import functions_db from scheduler import Scheduler - +import functions_db +import functions_general + class Server(dispatcher): """ The main server class from which everything branches. @@ -34,6 +35,7 @@ class Server(dispatcher): self.set_reuse_addr() self.bind(('', int(self.configvalue['site_port']))) self.listen(100) + self.start_time = time.time() print ' %s started on port %s.' % (self.configvalue['site_name'], self.configvalue['site_port'],) print '-'*50 @@ -117,30 +119,28 @@ class Server(dispatcher): Adds an object to the cached object list. """ self.object_list[object.id] = object - - def announce_all(self, message, with_ann_prefix=True, with_nl=True): - """ - Announces something to all connected players. - """ - if with_ann_prefix: - prefix = 'Announcement:' - else: - prefix = '' - - if with_nl: - newline = '\r\n' - else: - newline = '' - - for session in self.session_list: - session.push('%s %s%s' % (prefix, message,newline,)) - + def get_configvalue(self, configname): """ Retrieve a configuration value. """ return self.configvalue[configname] + def get_session_list(self): + """ + Lists the server's connected session objects. + """ + return self.session_list + + def remove_session(self, session): + """ + Removes a session from the server's session list. + """ + self.session_list.remove(session) + + def shutdown(self): + functions_general.announce_all(server, 'The server has been shutdown. Please check back soon.') + self.game_running = False """ END Server CLASS """ @@ -158,5 +158,5 @@ if __name__ == '__main__': scheduler.heartbeat() except KeyboardInterrupt: - server.announce_all('The server has been shutdown. Please check back soon.') + functions_general.announce_all(server, 'The server has been shutdown. Please check back soon.') print '--> Server killed by keystroke.' diff --git a/evennia/trunk/sessions.py b/evennia/trunk/sessions.py index 43f6d5b970..4f456798da 100755 --- a/evennia/trunk/sessions.py +++ b/evennia/trunk/sessions.py @@ -59,7 +59,7 @@ class PlayerSession(async_chat): """ async_chat.handle_close(self) self.logged_in = False - self.server.session_list.remove(self) + self.server.remove_session(self) print 'Sessions active:', len(self.server.session_list) def game_connect_screen(self, session):