"""hog4.py: Class methods for Hog 4 representation.""" import logging from time import sleep from typing import Any, Dict, Union from pythonosc import udp_client, osc_message_builder, osc_bundle, osc_message from antlr4 import ParserRuleContext class HogNet: """Class definition of a hognet participant.""" # button state constants buttonDOWN = 1 buttonUP = 0 def __init__(self, servers: Dict[int, object]) -> None: """Init method.""" self.servers = servers def button_press(self, device: ParserRuleContext, path: str, delay: float = 0.05) -> None: """Button presses are a pair of up/down OSC.""" self.send_message(device, path, self.buttonDOWN) sleep(delay) self.send_message(device, path, self.buttonUP) def send_message(self, device: ParserRuleContext, path: str, arg: Any) -> None: """Send a simple OSC message with one argument.""" msg = osc_message_builder.OscMessageBuilder(address=path) msg.add_arg(arg) self.send(device, msg.build()) def send(self, device: ParserRuleContext, msg: Union[osc_message.OscMessage, osc_bundle.OscBundle]) -> None: """Send python-osc messages.""" if device is None: # first configured server osc: udp_client = list(self.servers.values())[0] else: if device.nodeType().getText().lower() != 'h': logging.error("ERROR: Only Hog type devices are supported.") return try: osc = self.servers[device.number().value] except KeyError: logging.error("ERROR: Net# %d not found.", device.number().value) return try: osc.send(msg) except OSError as exception: logging.error(exception)