From 321242b0d9bf737dff931be8cedd6a1590a3be5a Mon Sep 17 00:00:00 2001 From: marios8543 Date: Tue, 17 Oct 2023 23:52:18 +0300 Subject: Experimental support for async method calls --- backend/src/plugin/method_call_request.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 backend/src/plugin/method_call_request.py (limited to 'backend/src/plugin/method_call_request.py') diff --git a/backend/src/plugin/method_call_request.py b/backend/src/plugin/method_call_request.py new file mode 100644 index 00000000..8d93a6cc --- /dev/null +++ b/backend/src/plugin/method_call_request.py @@ -0,0 +1,29 @@ +from typing import Any, TypedDict +from uuid import uuid4 +from asyncio import Event + +class SocketResponseDict(TypedDict): + id: str + success: bool + res: Any + +class MethodCallResponse: + def __init__(self, success: bool, result: Any) -> None: + self.success = success + self.result = result + +class MethodCallRequest: + def __init__(self) -> None: + self.id = str(uuid4()) + self.event = Event() + self.response: MethodCallResponse + + def set_result(self, dc: SocketResponseDict): + self.response = MethodCallResponse(dc["success"], dc["res"]) + self.event.set() + + async def wait_for_result(self): + await self.event.wait() + if not self.response.success: + raise Exception(self.response.result) + return self.response \ No newline at end of file -- cgit v1.2.3