Mercurial > code > home > repos > light9
view light9/subclient.py @ 2296:6529768a96a2
stronger types
author | drewp@bigasterisk.com |
---|---|
date | Tue, 30 May 2023 01:01:53 -0700 |
parents | 1241e61fcf74 |
children |
line wrap: on
line source
from light9.collector.collector_client import sendToCollector from twisted.internet import reactor from twisted.internet.defer import Deferred import traceback import time import logging from rdflib import URIRef from rdfdb.syncedgraph import SyncedGraph log = logging.getLogger() class SubClient: graph: SyncedGraph session: URIRef def __init__(self): """assumed that your init saves self.graph""" pass # we may later need init code for network setup def get_levels_as_sub(self): """Subclasses must implement this method and return a Submaster object.""" def send_levels_loop(self, periodSec=1.) -> None: sendStartTime = time.time() def done(sec): delay = max(0, (sendStartTime + periodSec) - time.time()) reactor.callLater(delay, self.send_levels_loop, periodSec) def err(e): log.warn('subclient loop: %r', e) reactor.callLater(2, self.send_levels_loop, periodSec) d = self._send_sub() d.addCallbacks(done, err) def _send_sub(self) -> Deferred: try: with self.graph.currentState() as g: outputSettings = self.get_output_settings(_graph=g) except Exception: traceback.print_exc() raise return sendToCollector( 'subclient', self.session, outputSettings, # when KC uses zmq, we get message # pileups and delays on collector (even # at 20fps). When sequencer uses zmp, # it runs great at 40fps. Not sure the # difference- maybe Tk main loop? useZmq=False)