aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/hrc/service/console
diff options
context:
space:
mode:
authorHsiangNianian <i@jyunko.cn>2024-09-19 14:44:33 +0800
committerHsiangNianian <i@jyunko.cn>2024-09-19 14:44:33 +0800
commite9a780496f7ce067e0d8d51ce1d62e48c9f2a8d9 (patch)
treea3e31e07fd001baa1cfce9ceebcdfed58b50bcda /hrc/service/console
parent9e18d7ebf7a17bb7d7d169da3a3cefde0956a9f9 (diff)
downloadHydroRollCore-e9a780496f7ce067e0d8d51ce1d62e48c9f2a8d9.tar.gz
HydroRollCore-e9a780496f7ce067e0d8d51ce1d62e48c9f2a8d9.zip
feat(core): Implement Service class and related functionalities
Co-authored-by: yuzhe <YUZHEthefool@users.noreply.github.com>
Diffstat (limited to 'hrc/service/console')
-rw-r--r--hrc/service/console/__init__.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/hrc/service/console/__init__.py b/hrc/service/console/__init__.py
new file mode 100644
index 0000000..e11768e
--- /dev/null
+++ b/hrc/service/console/__init__.py
@@ -0,0 +1,41 @@
+import asyncio
+import sys
+from typing_extensions import override
+
+from hrc.event import MessageEvent
+from hrc.service import Service
+
+class ConsoleServiceEvent(MessageEvent["ConsoleService"]):
+ message: str
+
+ @override
+ def get_sender_id(self) -> None:
+ return None
+
+ @override
+ def get_plain_text(self) -> str:
+ return self.message
+
+ @override
+ async def reply(self, message: str) -> None:
+ return await self.service.send(message)
+
+ async def is_same_sender(self) -> bool:
+ return True
+
+class ConsoleService(Service[ConsoleServiceEvent, None]):
+ name: str = "console"
+
+ @override
+ async def run(self) -> None:
+ while not self.core.should_exit.is_set():
+ print("Please input message: ") # noqa: T201
+ message = await asyncio.get_event_loop().run_in_executor(
+ None, sys.stdin.readline
+ )
+ await self.handle_event(
+ ConsoleServiceEvent(service=self, type="message", message=message, rule="")
+ )
+
+ async def send(self, message: str) -> None:
+ print(f"Send a message: {message}") # noqa: T201 \ No newline at end of file