From 388c0775349a902f2dd60d061c2f27ea32d69c0c Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 3 Aug 2020 22:23:24 +0200 Subject: [PATCH] Mock out beginnings of the recv logic --- simple_message_channels/smc.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/simple_message_channels/smc.py b/simple_message_channels/smc.py index a17d9a6..7e28689 100644 --- a/simple_message_channels/smc.py +++ b/simple_message_channels/smc.py @@ -1,5 +1,5 @@ """Sans I/O wire protocol for Hypercore""" -from typing import List, Tuple +from typing import List, Optional, Tuple import attr from pyvarint import encode, encoding_length @@ -11,6 +11,15 @@ __all__ = ["SimpleMessageChannel"] class SimpleMessageChannel: """A simple message channel.""" + message: Optional[Tuple[int, int, bytes]] = None + varint: int = 0 + factor: int = 1 + length: int = 0 + header: int = 0 + state: int = 0 + consumed = 0 + max_size = 8 * 1024 * 1024 + def send(self, channel: int, type: int, message: bytes) -> bytes: """Encode a channel, type and message data to be sent. @@ -32,9 +41,30 @@ class SimpleMessageChannel: payload += self.send(channel, type, message) return payload - def recv(self, data: bytes) -> Tuple[int, int, bytes]: + def recv(self, data: bytes) -> None: """Encode a channel, type, message to be sent. :param data: the message data """ + offset = 0 + + while offset < len(data): + if self.state == 2: + offset = self._read_msg(data, offset) + else: + offset = self._read_varint(data, offset) + + if self.state == 2 and self.length == 0: + self._read_msg(data, offset) + + def _read_msg(self, data: bytes, offset: int) -> int: + """TODO.""" + pass + + def _read_varint(self, data: bytes, offset: int) -> int: + """TODO.""" + pass + + def _next_state(self, data: bytes, offset: int) -> None: + """TODO.""" pass