Files @ bea44be4df38
Branch filter:

Location: light9/light9/subclient.py

drewp@bigasterisk.com
log levels
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)