Working new tickerhandler, handling both methods and functions.

This commit is contained in:
Griatch 2016-03-24 16:53:02 +01:00
parent bd7f9dfe47
commit dd6b6f06f7
2 changed files with 7 additions and 11 deletions

View file

@ -71,7 +71,6 @@ contrib = None
# Handlers # Handlers
SESSION_HANDLER = None SESSION_HANDLER = None
TICKER_HANDLER = None TICKER_HANDLER = None
OOB_HANDLER = None
CHANNEL_HANDLER = None CHANNEL_HANDLER = None
@ -118,7 +117,7 @@ def _init():
global search_object, search_script, search_player, search_channel, search_help, search_tag global search_object, search_script, search_player, search_channel, search_help, search_tag
global create_object, create_script, create_player, create_channel, create_message, create_help_entry global create_object, create_script, create_player, create_channel, create_message, create_help_entry
global settings,lockfuncs, logger, utils, gametime, ansi, spawn, managers global settings,lockfuncs, logger, utils, gametime, ansi, spawn, managers
global contrib, TICKER_HANDLER, OOB_HANDLER, SESSION_HANDLER, CHANNEL_HANDLER global contrib, TICKER_HANDLER, SESSION_HANDLER, CHANNEL_HANDLER
from .players.players import DefaultPlayer from .players.players import DefaultPlayer
from .players.players import DefaultGuest from .players.players import DefaultGuest

View file

@ -56,14 +56,13 @@ call the handler's `save()` and `restore()` methods when the server reboots.
""" """
import inspect import inspect
from builtins import object from builtins import object
from future.utils import listvalues
from twisted.internet.defer import inlineCallbacks from twisted.internet.defer import inlineCallbacks
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from evennia.scripts.scripts import ExtendedLoopingCall from evennia.scripts.scripts import ExtendedLoopingCall
from evennia.server.models import ServerConfig from evennia.server.models import ServerConfig
from evennia.utils.logger import log_trace, log_err from evennia.utils.logger import log_trace, log_err
from evennia.utils.dbserialize import dbserialize, dbunserialize, pack_dbobj from evennia.utils.dbserialize import dbserialize, dbunserialize
from evennia.utils import variable_from_module from evennia.utils import variable_from_module
_GA = object.__getattribute__ _GA = object.__getattribute__
@ -101,14 +100,13 @@ class Ticker(object):
""" """
to_remove = [] to_remove = []
for store_key, (args, kwargs) in self.subscriptions.iteritems(): for store_key, (args, kwargs) in self.subscriptions.iteritems():
print "calling:", store_key, args, kwargs
callback = yield kwargs.pop("_callback", "at_tick") callback = yield kwargs.pop("_callback", "at_tick")
obj = yield kwargs.pop("_obj", None) obj = yield kwargs.pop("_obj", None)
try: try:
if callable(callback): if callable(callback):
# call directly # call directly
yield callback(*args, **kwargs) yield callback(*args, **kwargs)
return continue
# try object method # try object method
if not obj or not obj.pk: if not obj or not obj.pk:
# object was deleted between calls # object was deleted between calls
@ -173,7 +171,6 @@ class Ticker(object):
""" """
start_delay = kwargs.pop("_start_delay", None) start_delay = kwargs.pop("_start_delay", None)
print "adding sub:", store_key, args, kwargs
self.subscriptions[store_key] = (args, kwargs) self.subscriptions[store_key] = (args, kwargs)
self.validate(start_delay=start_delay) self.validate(start_delay=start_delay)
@ -422,6 +419,7 @@ class TickerHandler(object):
when wanting to modify/remove the ticker later. when wanting to modify/remove the ticker later.
""" """
interval = int(interval)
obj, path, callfunc = self._get_callback(callback) obj, path, callfunc = self._get_callback(callback)
store_key = self._store_key(obj, path, interval, callfunc, idstring) store_key = self._store_key(obj, path, interval, callfunc, idstring)
self.ticker_storage[store_key] = (args, kwargs) self.ticker_storage[store_key] = (args, kwargs)
@ -444,7 +442,6 @@ class TickerHandler(object):
""" """
obj, path, callfunc = self._get_callback(callback) obj, path, callfunc = self._get_callback(callback)
store_key = self._store_key(obj, path, interval, callfunc, idstring) store_key = self._store_key(obj, path, interval, callfunc, idstring)
print "remove store_key:", store_key
to_remove = self.ticker_storage.pop(store_key, None) to_remove = self.ticker_storage.pop(store_key, None)
if to_remove: if to_remove:
self.ticker_pool.remove(store_key) self.ticker_pool.remove(store_key)
@ -487,13 +484,13 @@ class TickerHandler(object):
""" """
if interval is None: if interval is None:
# return dict of all, ordered by interval # return dict of all, ordered by interval
return dict((interval, listvalues(ticker.subscriptions)) return dict((interval, ticker.subscriptions)
for interval, ticker in self.ticker_pool.tickers.items()) for interval, ticker in self.ticker_pool.tickers.iteritems())
else: else:
# get individual interval # get individual interval
ticker = self.ticker_pool.tickers.get(interval, None) ticker = self.ticker_pool.tickers.get(interval, None)
if ticker: if ticker:
return listvalues(ticker.subscriptions) return {interval: ticker.subscriptions}
# main tickerhandler # main tickerhandler
TICKER_HANDLER = TickerHandler() TICKER_HANDLER = TickerHandler()