summaryrefslogtreecommitdiff
path: root/backend/src/plugin/method_call_request.py
diff options
context:
space:
mode:
authormarios8543 <marios8543@gmail.com>2023-10-17 23:52:18 +0300
committermarios8543 <marios8543@gmail.com>2023-10-31 23:18:23 +0200
commit321242b0d9bf737dff931be8cedd6a1590a3be5a (patch)
tree6e3fb7b7ecac29f3545875c8a69ac585bda9e472 /backend/src/plugin/method_call_request.py
parent949c5e73c496c3b467f7084ffffb466f98f906bc (diff)
downloaddecky-loader-321242b0d9bf737dff931be8cedd6a1590a3be5a.tar.gz
decky-loader-321242b0d9bf737dff931be8cedd6a1590a3be5a.zip
Experimental support for async method calls
Diffstat (limited to 'backend/src/plugin/method_call_request.py')
-rw-r--r--backend/src/plugin/method_call_request.py29
1 files changed, 29 insertions, 0 deletions
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