def send(self, target, *message): """ Send osc message over udp """ if target.isdigit(): target = '127.0.0.1:' + target if 'osc.udp://' not in target: target = 'osc.udp://' + target ServerThread.send(self, target, *message)
class qlcStopper(object): def __init__(self, port, qlcappport): self.port = port if self.port is not None: self.server = ServerThread(self.port) self.server.register_methods(self) self.server.start() @make_method('/Stop', None) def allStopQlc(self, path, args): for path in paths: self.server.send(qlcappport, path, 0)
class qlcDelayer(object): def __init__(self, port, qlcappport): self.port = port if self.port is not None: self.server = ServerThread(self.port) self.server.register_methods(self) self.server.start() @make_method(None, 'i') def sendToQlc(self, path, args): sleep(.001) self.server.send(qlcappport, path, args[0]) @make_method(None, 'fff') # /BC/1 R G B @make_method(None, 'iii') # /BC/1 R G B def sendToQlcRgb(self, path, args): if '/Segment' in path: sleep(.001) self.server.send(qlcappport, path.replace('/Segment', '/Red/Segment'), args[0]) self.server.send(qlcappport, path.replace('/Segment', '/Green/Segment'), args[1]) self.server.send(qlcappport, path.replace('/Segment', '/Blue/Segment'), args[2])
class XAirCmdApp(cmd.Cmd): allow_cli_args = False abbrev = True intro = "Enter OSC command (Control-C or Control-D to quit)..." prompt = 'xair> ' # legalChars = u'/' + cmd.Cmd.legalChars def __init__(self, server, destport=10024, srcport=11111, debug=False, **kwargs): """Class initialiser.""" self.timeout = self.settable['timeout'] = 500 self.server = self.settable['server'] = server self.destport = self.settable['destport'] = destport # add built-in custom command shortcuts self.shortcuts.update({ '/': 'osc', }) # add built-in custom command aliases kwargs.setdefault('use_ipython', True) super().__init__(**kwargs) self.aliases.update({ 'mute': 'osc /lr/mix/on 0', 'unmute': 'osc /lr/mix/on 1', 'mainvol': '/lr/mix/fader', }) self.srcport = srcport self.debug = debug self.osc_commands = parse_commands() self.osc_command_names = sorted([cmd.address.lstrip('/') for cmd in self.osc_commands.values()]) self.queue = queue.Queue() self.osc = ServerThread(self.srcport) self.osc.add_method(None, None, self.osc_recv) # hooks self.register_preloop_hook(self.start_osc_server) self.register_postloop_hook(self.stop_osc_server) def osc_recv(self, path, args, types, addr): log.debug("OSC RECV (%s, %s): %s %s [%s]", addr.hostname, addr.port, path, types, ", ".join(repr(arg) for arg in args)) self.queue.put((path, args, types, addr)) def do_osc(self, line): if not line: return self.help_osc() try: oscaddr, rawargs = line.split(None, 1) except ValueError: oscaddr = line rawargs = '' oscaddr = '/' + oscaddr.lstrip('/') # ~ if not oscaddr.startswith('/'): # ~ self.perror("OSC address must start with a slash", traceback_war=False) # ~ return oscargs = [] for arg in shlex.split(rawargs, posix=False): if arg.strip(): try: oscargs.append(ast.literal_eval(arg)) except: # noqa:E722 oscargs.append(arg) log.debug("OSC SEND -> (%s, %s): %s %s", self.server, self.destport, oscaddr, "".join("%r" % arg for arg in oscargs)) self.osc.send((self.server, self.destport), oscaddr, *oscargs) try: path, args, types, addr = self.queue.get(timeout=self.timeout / 1000) except queue.Empty: self.p_warn("No reply within timeout ({:d} msec).".format(self.timeout)) else: self.p_ok("{} {} [{}]".format(path, types, ", ".join(repr(arg) for arg in args))) def help_osc(self): self.poutput("osc ADDR [arg1 [arg2] ... [argn]]") def complete_osc(self, text, line, begidx, endidx): log.debug((text, line, begidx, endidx)) #if not text.startswith('/'): # text = '/' + text return self.delimiter_complete(text, line, begidx, endidx, self.osc_command_names, '/') def p_ok(self, msg): self.poutput(msg, color=Fore.GREEN) def p_warn(self, msg): self.poutput(msg, color=Fore.YELLOW) def start_osc_server(self) -> None: self.osc.start() def stop_osc_server(self) -> None: self.osc.stop() self.poutput('') def postparse(self, parse_result) -> None: log.debug("postparse: %r", list(parse_result)) return parse_result