Files
RiceRound-ComfyUI_RiceRound/message_holder.py
T
2025-02-20 14:54:05 +08:00

57 lines
1.4 KiB
Python

import json
import os
import time
import requests
from server import PromptServer
from aiohttp import web
class Cancelled(Exception):
0
class MessageHolder:
stash = {}
messages = {}
cancelled = False
@classmethod
def addMessage(cls, id, message):
if message == "__cancel__":
cls.messages = {}
cls.cancelled = True
elif message == "__start__":
cls.messages = {}
cls.stash = {}
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()
start_time = time.time()
while not sid in cls.messages and not "-1" 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()
message = cls.messages.pop(str(id), None) or cls.messages.pop("-1")
return message.strip()
routes = PromptServer.instance.routes
@routes.post("/riceround/message")
async def message_handler(request):
post = await request.post()
MessageHolder.addMessage(post.get("id"), post.get("message"))
return web.json_response({})