More session stuff, event code re-arrangement.

This commit is contained in:
Greg Taylor 2006-12-22 02:43:29 +00:00
parent 5816370857
commit 925cfe6c15
6 changed files with 58 additions and 68 deletions

View file

@ -148,16 +148,14 @@ class Object(models.Model):
attribs = Attribute.objects.filter(object=self)
return attribs
def destroy(self, session_list):
def destroy(self):
"""
Destroys an object, sets it to GOING. Can still be recovered
if the user decides to.
session_list: (list) The server's session_list attribute.
"""
# See if we need to kick the player off.
session = functions_db.session_from_object(session_list, self)
session = session_mgr.session_from_object(self)
if session:
session.msg("You have been destroyed, goodbye.")
session.handle_close()
@ -165,9 +163,7 @@ class Object(models.Model):
# If the object is a player, set the player account object to inactive.
# It can still be recovered at this point.
if self.is_player():
print 'PLAYER'
uobj = User.objects.get(id=self.id)
print 'VICTIM', uobj
uobj.is_active = False
uobj.save()
@ -175,11 +171,9 @@ class Object(models.Model):
self.type = 5
self.save()
def delete(self, session_list):
def delete(self):
"""
Deletes an object permanently. Marks it for re-use by a new object.
session_list: (list) The server's session_list attribute.
"""
# Delete the associated player object permanently.
uobj = User.objects.filter(id=self.id)
@ -445,3 +439,4 @@ class Object(models.Model):
return "%s(#%d%s)" % (self.name, self.id, self.flag_string())
import functions_db
import session_mgr

View file

@ -1,10 +1,9 @@
from apps.objects.models import Object
import functions_db
import functions_general
import commands_general
import cmdhandler
import session_mgr
from apps.objects.models import Object
"""
Staff commands may be a bad description for this file, but it'll do for now.
Any command here is prefixed by an '@' sign, usually denoting a builder, staff
@ -60,7 +59,7 @@ def cmd_destroy(cdat):
target_obj = results[0]
session.msg("You destroy %s." % (target_obj,))
target_obj.destroy(session_mgr.get_session_list())
target_obj.destroy()
def cmd_name(cdat):
"""
@ -375,7 +374,6 @@ def cmd_wall(cdat):
Announces a message to all connected players.
"""
session = cdat['session']
server = cdat['server']
wallstring = ' '.join(cdat['uinput']['splitted'][1:])
if wallstring == '':
@ -383,7 +381,7 @@ def cmd_wall(cdat):
return
message = "%s shouts \"%s\"" % (session.get_pobject().get_name(), wallstring)
functions_general.announce_all(server, message)
functions_general.announce_all(message)
def cmd_shutdown(cdat):
"""

View file

@ -2,10 +2,7 @@
This is the events module, where all of the code for periodic events needs
to reside.
ADDING AN EVENT:
* Add an entry to the 'schedule' dictionary.
* Add the proper event_ function here.
* Profit.
"""
schedule = {

View file

@ -1,3 +1,4 @@
import session_mgr
"""
General commonly used functions.
"""
@ -62,7 +63,7 @@ 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):
def announce_all(message, with_ann_prefix=True, with_nl=True):
"""
Announces something to all connected players.
"""
@ -76,5 +77,5 @@ def announce_all(server, message, with_ann_prefix=True, with_nl=True):
else:
newline = ''
for session in server.get_session_list():
for session in session_mgr.get_session_list():
session.msg_no_nl('%s %s%s' % (prefix, message,newline,))

View file

@ -1,36 +1,51 @@
import time
import events
"""
A really simple scheduler. We can probably get a lot fancier with this
in the future, but it'll do for now.
class Scheduler:
ADDING AN EVENT:
* Add an entry to the 'schedule' dictionary.
* Add the proper event_ function here.
* Profit.
"""
schedule = {
'event_example': 60,
}
lastrun = {}
"""
BEGIN EVENTS
"""
def event_example():
"""
A really simple scheduler. We can probably get a lot fancier with this
in the future, but it'll do for now.
This is where the example event would be placed.
"""
pass
"""
END EVENTS
"""
Open up events.py for a schedule of events and their respective functions.
# The timer method to be triggered by the main server loop.
def heartbeat():
"""
def __init__(self, server):
self.server = server
Handle one tic/heartbeat.
"""
tictime = time.time()
for event in schedule:
try:
lastrun[event]
except:
lastrun[event] = time.time()
# The timer method to be triggered by the main server loop.
def heartbeat(self):
"""
Handle one tic/heartbeat.
"""
tictime = time.time()
for event in events.schedule:
try:
events.lastrun[event]
except:
events.lastrun[event] = time.time()
diff = tictime - events.lastrun[event]
if diff >= events.schedule[event]:
event_func = getattr(events, event)
if callable(event_func):
event_func(self.server)
# We'll get a new reading for time for accuracy.
events.lastrun[event] = time.time()
diff = tictime - lastrun[event]
if diff >= schedule[event]:
event_func = getattr(self, event)
if callable(event_func):
event_func()
# We'll get a new reading for time for accuracy.
lastrun[event] = time.time()

View file

@ -3,10 +3,9 @@ from asynchat import async_chat
import socket, asyncore, time, sys
from django.db import models
from django.db import connection
from django.contrib.auth.models import User
from apps.config.models import ConfigValue, CommandAlias
from apps.objects.models import Object, Attribute
from scheduler import Scheduler
import scheduler
import functions_db
import functions_general
import global_defines
@ -17,8 +16,6 @@ class Server(dispatcher):
The main server class from which everything branches.
"""
def __init__(self):
self.session_list = []
self.object_list = {}
self.cmd_alias_list = {}
self.configvalue = {}
self.game_running = True
@ -101,20 +98,8 @@ class Server(dispatcher):
"""
return self.configvalue[configname]
def get_session_list(self):
"""
Lists the server's connected session objects.
"""
return session_mgr.get_session_list()
def remove_session(self, session):
"""
Removes a session from the server's session list.
"""
session_mgr.remove_session(session)
def shutdown(self, message='The server has been shutdown. Please check back soon.'):
functions_general.announce_all(server, message)
functions_general.announce_all(message)
self.game_running = False
"""
END Server CLASS
@ -125,7 +110,6 @@ BEGIN MAIN APPLICATION LOGIC
"""
if __name__ == '__main__':
server = Server()
scheduler = Scheduler(server)
try:
while server.game_running: