ocarina/src/core/event.py

78 lines
1.3 KiB
Python

#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Feb 24, 2010 9:13:41 PM$"
from ct.dict import Dict
from ct.slist import Slist
# Maintain the list of guests
class GuestList(Slist):
def __init__(self,name):
Slist.__init__(self)
self.name = name
self.active = False
class Event(Dict):
def __init__(self):
Dict.__init__(self)
def type(self,guest):
return type(guest).__name__
# Add a "guest" (function or script) to this event
def invite(self, name, guest, priority=None):
type = self.type(guest)
if priority==None:
if type=='str' or type=='unicode':
priority = 200
else:
priority = 100
if self.has(name) == False:
self[name] = GuestList(name)
self[name].add(guest, priority)
# Remove a guest from the guest list
def uninvite(self, name, guest):
self[name].remove(guest)
def stop(self,name):
self[name].active = False
# Start the party!
def start(self,name,args=None):
if self.has(name) == False:
return
self[name].active = True
for priority,guest in self[name]:
if self[name].active == True:
if self.type(guest)=='unicode' or self.type(guest)=='str':
import scripting
scripting.runScript(guest)
elif args==None:
guest()
else:
guest(args)
self.stop(name)