diff options
| author | AAGaming <aagaming@riseup.net> | 2023-12-31 20:29:19 -0500 |
|---|---|---|
| committer | AAGaming <aagaming@riseup.net> | 2023-12-31 20:29:19 -0500 |
| commit | c5ea95a787565e56bce6d50b52cecef85ad5d177 (patch) | |
| tree | bd5b6d44cf09ab7271e95e41dd3dcefd3c0c5ffe /backend/decky_loader/plugin/messages.py | |
| parent | db96121304e78ceb00f1db0eab5a2f098a6f419b (diff) | |
| download | decky-loader-c5ea95a787565e56bce6d50b52cecef85ad5d177.tar.gz decky-loader-c5ea95a787565e56bce6d50b52cecef85ad5d177.zip | |
finalize api for plugin events in backend
just need frontend impl now
Diffstat (limited to 'backend/decky_loader/plugin/messages.py')
| -rw-r--r-- | backend/decky_loader/plugin/messages.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/backend/decky_loader/plugin/messages.py b/backend/decky_loader/plugin/messages.py new file mode 100644 index 00000000..d53efbee --- /dev/null +++ b/backend/decky_loader/plugin/messages.py @@ -0,0 +1,36 @@ +from typing import Any, TypedDict +from enum import IntEnum +from uuid import uuid4 +from asyncio import Event + +class SocketMessageType(IntEnum): + CALL = 0 + RESPONSE = 1 + EVENT = 2 + +class SocketResponseDict(TypedDict): + type: SocketMessageType + 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.result
\ No newline at end of file |
