Adjust some function names in the script parents to be at_ instead of a_. Also re-designed the scheduling system to be a lot more pythonic and easy to use. Utilizes classes to represent events. Much easier to plug in events from within the game directory now as well.
This commit is contained in:
parent
b3c386a2c3
commit
5a465746c5
8 changed files with 159 additions and 145 deletions
110
src/scheduler.py
110
src/scheduler.py
|
|
@ -1,112 +1,28 @@
|
|||
import time
|
||||
from twisted.internet import task
|
||||
from src import events
|
||||
"""
|
||||
This file contains the event scheduler system.
|
||||
|
||||
ADDING AN EVENT:
|
||||
* Create an event function to call.
|
||||
* Add an entry to the 'schedule' dictionary here.
|
||||
* Create an event sub-class in events.py.
|
||||
* Add it to the add_global_events() function at the end of the module.
|
||||
* Profit.
|
||||
"""
|
||||
|
||||
# Dictionary of events with a list in the form of:
|
||||
# [<function>, <interval>, <lastrantime>, <taskobject>, <description>]
|
||||
schedule = {
|
||||
'evt_check_sessions': [events.evt_check_sessions, # Function
|
||||
60, # Interval (seconds)
|
||||
time.time(), # Last time executed (now)
|
||||
None, # Task object
|
||||
"Session consistency checks."] # Description
|
||||
}
|
||||
# List of IntervalEvent sub-classed objects.
|
||||
schedule = []
|
||||
|
||||
def start_events():
|
||||
"""
|
||||
Start the event system, which is built on Twisted's framework.
|
||||
"""
|
||||
for event in schedule:
|
||||
event_func = get_event_function(event)
|
||||
|
||||
if callable(event_func):
|
||||
# Set the call-back function for the task to trigger_event, but pass
|
||||
# a reference to the event function.
|
||||
event_task = task.LoopingCall(trigger_event, event_func, event)
|
||||
# Start the task up with the specified interval.
|
||||
event_task.start(get_event_interval(event), now=False)
|
||||
# Set a reference to the event's task object in the dictionary so we
|
||||
# can re-schedule, start, and stop events from elsewhere.
|
||||
set_event_taskobj(event, event_task)
|
||||
|
||||
def get_event(event_name):
|
||||
event.start_event_loop()
|
||||
|
||||
def add_event(event):
|
||||
"""
|
||||
Return the relevant entry in the schedule dictionary for the named event.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
Adds an event instance to the scheduled event list.
|
||||
|
||||
Args:
|
||||
* event: (IntervalEvent) The event to add to the scheduler.
|
||||
"""
|
||||
return schedule.get(event_name, None)
|
||||
|
||||
def get_event_function(event_name):
|
||||
"""
|
||||
Return a reference to the event's function.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
return get_event(event_name)[0]
|
||||
|
||||
def get_event_interval(event_name):
|
||||
"""
|
||||
Return the event's execution interval.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
return get_event(event_name)[1]
|
||||
|
||||
def get_event_nextfire(event_name):
|
||||
"""
|
||||
Returns a value in seconds when the event is going to fire off next.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
return (get_event(event_name)[2]+get_event_interval(event_name))-time.time()
|
||||
|
||||
def get_event_taskobj(event_name):
|
||||
"""
|
||||
Returns an event's task object.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
return get_event(event_name)[3]
|
||||
|
||||
def get_event_description(event_name):
|
||||
"""
|
||||
Returns an event's description.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
return get_event(event_name)[4]
|
||||
|
||||
def set_event_taskobj(event_name, taskobj):
|
||||
"""
|
||||
Sets an event's task object.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
get_event(event_name)[3] = taskobj
|
||||
|
||||
def set_event_lastfired(event_name):
|
||||
"""
|
||||
Sets an event's last fired time.
|
||||
|
||||
event_name: (string) The key of the event in the schedule dictionary.
|
||||
"""
|
||||
get_event(event_name)[2] = time.time()
|
||||
|
||||
def trigger_event(event_func, event_name):
|
||||
"""
|
||||
Update the last ran time and fire off the event.
|
||||
|
||||
event_func: (func_reference) Reference to the event function to fire.
|
||||
eventname: (string) The name of the event (as per schedule dict).
|
||||
"""
|
||||
event_func()
|
||||
set_event_lastfired(event_name)
|
||||
schedule.append(event)
|
||||
event.start_event_loop()
|
||||
Loading…
Add table
Add a link
Reference in a new issue