From 317e2bd90555142520660c05d6188bd217b604f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Mon, 16 Jun 2025 16:28:49 +0200 Subject: [PATCH] :sparkles: add zmq server start WIP This adds simple zmq server to listen. It is probably very wrong place to have it. --- .../ayon_core/tools/console_log/log_server.py | 40 +++++++++++++++++++ .../ayon_core/tools/tray/ui/addons_manager.py | 7 ++++ client/pyproject.toml | 2 + 3 files changed, 49 insertions(+) create mode 100644 client/ayon_core/tools/console_log/log_server.py diff --git a/client/ayon_core/tools/console_log/log_server.py b/client/ayon_core/tools/console_log/log_server.py new file mode 100644 index 0000000000..185a7a78db --- /dev/null +++ b/client/ayon_core/tools/console_log/log_server.py @@ -0,0 +1,40 @@ +"""Simple log server for Ayon Core Console Log. + +Based on zeroMQ for communication. + +""" +import asyncio +import threading +import zmq +from zmq.asyncio import Context, Poller +from loguru import logger + + +class LogServer: + """Log server for Ayon Core Console Log.""" + + def __init__(self, port: int = 5555): + self.port = port + self.context = Context() + self.socket = self.context.socket(zmq.SUB) + self.socket.bind(f"tcp://*:{self.port}") + self.socket.subscribe("") # Subscribe to all messages + logger.info(f"Log server started on port {self.port}") + + def start(self): + """Start the log server.""" + logger.info("Starting log server...") + threading.Thread(target=self._run, daemon=True).start() + + def _run(self): + """Run the log server in a separate thread.""" + asyncio.run(self._serve()) + + async def _serve(self): + """Serve log messages asynchronously.""" + logger.info("Entering log server event loop...") + # This loop will run indefinitely, listening for log messages + # and printing them to the console. + while True: + _, message = await self.socket.recv_multipart() + logger.info(f"Received log message: {message.decode('utf8').strip()}") \ No newline at end of file diff --git a/client/ayon_core/tools/tray/ui/addons_manager.py b/client/ayon_core/tools/tray/ui/addons_manager.py index 2e6f0c0aae..d2f038c31c 100644 --- a/client/ayon_core/tools/tray/ui/addons_manager.py +++ b/client/ayon_core/tools/tray/ui/addons_manager.py @@ -1,6 +1,11 @@ +import asyncio import os import time from typing import Callable +from ayon_core.tools.console_log.log_server import LogServer + +import zmq +import zmq.asyncio from ayon_core.addon import AddonsManager, ITrayAddon, ITrayService from ayon_core.tools.tray.webserver import ( @@ -27,6 +32,8 @@ class TrayAddonsManager(AddonsManager): self._tray_manager = tray_manager self._webserver_manager = WebServerManager(find_free_port(), None) + self._log_server = LogServer() + self._log_server.start() self.doubleclick_callbacks = {} self.doubleclick_callback = None diff --git a/client/pyproject.toml b/client/pyproject.toml index edf7f57317..eb4540d16d 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -10,6 +10,8 @@ pyblish-base = "^1.8.11" speedcopy = "^2.1" six = "^1.15" qtawesome = "0.7.3" +pyzmq = "^27.0" +tornado = "^6.5.1" [ayon.runtimeDependencies] aiohttp-middlewares = "^2.0.0"