From 92d7558a1f748e5fc02a49250b81c1b213e0cbf2 Mon Sep 17 00:00:00 2001 From: Darren Burns Date: Mon, 12 Aug 2024 16:43:23 +0100 Subject: [PATCH] Skeleton of handling msgpackd data --- src/textual_web/app_session.py | 4 ++++ src/textual_web/ganglion_client.py | 7 +++++++ src/textual_web/session.py | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/src/textual_web/app_session.py b/src/textual_web/app_session.py index ddee473..28aefce 100644 --- a/src/textual_web/app_session.py +++ b/src/textual_web/app_session.py @@ -196,6 +196,7 @@ class AppSession(Session): META = b"M" DATA = b"D" + PACKED = b"P" stderr_data = io.BytesIO() @@ -216,6 +217,7 @@ class AppSession(Session): on_data = self._connector.on_data on_meta = self._connector.on_meta + on_packed = self._connector.on_packed try: ready = False for _ in range(10): @@ -240,6 +242,8 @@ class AppSession(Session): await self.send_meta({"type": meta_type}) else: await on_meta(json.loads(payload)) + elif type_bytes == PACKED: + await on_packed(payload) except IncompleteReadError: # Incomplete read means that the stream was closed diff --git a/src/textual_web/ganglion_client.py b/src/textual_web/ganglion_client.py index 81625b2..3d80bac 100644 --- a/src/textual_web/ganglion_client.py +++ b/src/textual_web/ganglion_client.py @@ -81,6 +81,13 @@ class _ClientConnector(SessionConnector): "You may be running a version of Textual unsupported by this version of Textual Web." ) + async def on_packed(self, payload: bytes) -> None: + """Handle packed data from session. + + Args: + payload: Msgpack data to handle. + """ + async def on_close(self) -> None: await self.client.send(packets.SessionClose(self.session_id, self.route_key)) self.client.session_manager.on_session_end(self.session_id) diff --git a/src/textual_web/session.py b/src/textual_web/session.py index 2bcdbc5..b1bdf4c 100644 --- a/src/textual_web/session.py +++ b/src/textual_web/session.py @@ -22,6 +22,13 @@ class SessionConnector: meta: Mapping of meta information. """ + async def on_packed(self, payload: bytes) -> None: + """Handle data packed with msgpack from session. + + Args: + payload: Msgpack data to handle. + """ + async def on_close(self) -> None: """Handle session close."""