Files
RiceRound-ComfyUI_RiceRound/message_holder.py
T
2025-02-28 04:00:01 +08:00

55 lines
1.3 KiB
Python

import json
import os
import time
import requests
from server import PromptServer
from aiohttp import web
class Cancelled(Exception):
0
class MessageHolder:
messages = {}
cancelled = False
@classmethod
def addMessage(cls, id, message):
if message == "__cancel__":
cls.messages = {}
cls.cancelled = True
elif message == "__start__":
cls.messages = {}
cls.cancelled = False
else:
cls.messages[str(id)] = message
@classmethod
def waitForMessage(cls, id, period=0.1, timeout=60):
sid = str(id)
cls.messages.clear()
cls.cancelled = False
start_time = time.time()
while sid not in cls.messages:
if cls.cancelled:
cls.cancelled = False
raise Cancelled()
if time.time() - start_time > timeout:
raise Cancelled("Operation timed out")
time.sleep(period)
if cls.cancelled:
cls.cancelled = False
raise Cancelled()
return cls.messages.pop(sid)
routes = PromptServer.instance.routes
@routes.post("/riceround/message")
async def message_handler(request):
data = await request.json()
MessageHolder.addMessage(data["id"], data["message"])
return web.json_response({})