Source code for core.clock
# core/clock.py
#
#
""" op de klok geschakeld. """
__copyright__ = "Copyright 2015, B.H.J Thate"
## IMPORTS
from core.utils.name import named
from core.dispatcher import Dispatcher
from core.kernel import fleet
from core.thing import Thing
import threading
import time
# TIMER
[docs]class Timer(Thing):
def __init__(zelf, time_alarm, event, *args, **kwargs):
Thing.__init__(zelf, *args, **kwargs)
zelf.sleep = time_alarm - time.time()
zelf.event = event
[docs] def start(zelf, *args, **kwargs):
zelf._timer = threading.Timer(zelf.sleep, zelf.echo)
zelf._timer.setDaemon(True)
zelf._timer.setName(named(zelf.echo))
zelf._timer._start = time.time()
zelf._timer._last = time.time()
zelf._timer._status = "start"
zelf._timer._status = "running"
zelf._timer.sleep = zelf.sleep
zelf._timer.start()
[docs] def echo(zelf, *args, **kwargs):
for bot in fleet: bot.announce(zelf.event.parsed.rest)
[docs] def stop(zelf, *args, **kwargs):
zelf._timer._status = "stopped"
zelf._timer.cancel()
running = []
## LOOPS
[docs]class Repeater(Thing):
""" a Repeater calls a function every x seconds. """
def __init__(zelf, func, *args, **kwargs):
""" args = function, sleeptime. """
Thing.__init__(zelf, **kwargs)
zelf.kwargs = kwargs
zelf.args = args
zelf.func = func
zelf.sleep = args[0]
zelf._start = time.time()
zelf._status = "start"
zelf._running = named(zelf.func)
[docs] def start(zelf, *args, **kwargs):
""" initialize a Looper. """
zelf._timer = threading.Timer(zelf.sleep, zelf.run)
zelf._timer.setDaemon(True)
zelf._timer.setName(named(zelf.func))
zelf._timer._nrs = Thing()
zelf._timer._nrs.loops = 0
zelf._timer._start = time.time()
zelf._timer._last = time.time()
zelf._timer.sleep = zelf.sleep
zelf._timer._status = "waiting"
zelf._timer.start()
[docs] def run(zelf, *args, **kwargs):
zelf.start()
zelf._timer._status = "running"
zelf._timer._nrs.loops += 1
zelf.func(*zelf.args, **zelf.kwargs)
[docs] def exit(zelf, *args, **kwargs):
zelf._status = ""
zelf._timer.cancel()