Source code for botlib.handler

# mad/scheduler.py
#
#

""" schedule events. """

from .launcher import Launcher
from .object import Object
from .register import Register

import logging
import queue
import time

[docs]class Handler(Launcher): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._thrs = [] self._connected = Object() self._handlers = Register() self._queue = queue.Queue() self._running = False self._time.start = time.time()
[docs] def callcb(self, event): pass
[docs] def dispatch(self, event): event.parse() for handler in self._handlers.get(event._parsed.cmnd, []): logging.warn("# handler %s" % str(handler)) handler(event)
[docs] def scheduler(self, timeout=None): self._connected.wait() self._running = True self._state.status = "running" self._time.latest = time.time() while self._state.status: event = self._queue.get(timeout=timeout) if not event: break self._counter.events = self._counter.events + 1 self.handle(event)
[docs] def handle(self, event): if event and "txt" in event: return self.launch(self.dispatch, event)
[docs] def prompt(self): """ virtual handler to display a prompt. """ pass
[docs] def put(self, *args, **kwargs): """ put an event to the handler. """ self._queue.put_nowait(*args, **kwargs)
[docs] def register(self, key, value, force=True): """ register a handler. """ self._handlers.register(key, value, force=True)
[docs] def start(self, *args, **kwargs): """ give the start signal. """ from .space import cfg logging.warn("# start %s" % self.id()) self.launch(self.scheduler, daemon=True) super().start(*args, **kwargs) self._connected.ready()
[docs] def stop(self): """ stop the handler. """ self._state.status = "" self._queue.put_nowait(None)