Free style some more untested place holder code
This commit is contained in:
parent
16184c0c27
commit
abbc6277f4
@ -11,6 +11,7 @@ __all__ = ["SimpleMessageChannel"]
|
|||||||
class SimpleMessageChannel:
|
class SimpleMessageChannel:
|
||||||
"""A simple message channel."""
|
"""A simple message channel."""
|
||||||
|
|
||||||
|
message: bytes = attr.Factory(bytes)
|
||||||
messages: List[Tuple[int, int, bytes]] = attr.Factory(list)
|
messages: List[Tuple[int, int, bytes]] = attr.Factory(list)
|
||||||
|
|
||||||
varint: int = 0
|
varint: int = 0
|
||||||
@ -60,7 +61,22 @@ class SimpleMessageChannel:
|
|||||||
|
|
||||||
def _read_msg(self, data: bytes, offset: int) -> int:
|
def _read_msg(self, data: bytes, offset: int) -> int:
|
||||||
"""TODO."""
|
"""TODO."""
|
||||||
pass
|
free = len(data) - offset
|
||||||
|
|
||||||
|
if free >= self.length:
|
||||||
|
if self.message:
|
||||||
|
self.message += data
|
||||||
|
else:
|
||||||
|
self.message = data[offset : offset + self.length]
|
||||||
|
|
||||||
|
offset += self.length
|
||||||
|
self._next_state(data, offset)
|
||||||
|
return offset
|
||||||
|
|
||||||
|
self.message += data
|
||||||
|
self.length -= free
|
||||||
|
|
||||||
|
return len(data)
|
||||||
|
|
||||||
def _read_varint(self, data: bytes, offset: int) -> int:
|
def _read_varint(self, data: bytes, offset: int) -> int:
|
||||||
"""TODO."""
|
"""TODO."""
|
||||||
@ -69,10 +85,8 @@ class SimpleMessageChannel:
|
|||||||
self.consumed += 1
|
self.consumed += 1
|
||||||
|
|
||||||
if data[offset] < 128:
|
if data[offset] < 128:
|
||||||
state = self._next_state(data, offset + 1)
|
self._next_state(data, offset + 1)
|
||||||
if state:
|
|
||||||
return offset
|
return offset
|
||||||
return len(data)
|
|
||||||
|
|
||||||
offset += 1
|
offset += 1
|
||||||
|
|
||||||
@ -83,4 +97,23 @@ class SimpleMessageChannel:
|
|||||||
|
|
||||||
def _next_state(self, data: bytes, offset: int) -> bool:
|
def _next_state(self, data: bytes, offset: int) -> bool:
|
||||||
"""TODO."""
|
"""TODO."""
|
||||||
pass
|
if self.state == 0:
|
||||||
|
self.state = 1
|
||||||
|
self.factor = 1
|
||||||
|
self.length = self.varint
|
||||||
|
self.consumed = 0
|
||||||
|
self.varint = 0
|
||||||
|
if not self.length:
|
||||||
|
self.varint = 0
|
||||||
|
elif self.state == 1:
|
||||||
|
self.state = 2
|
||||||
|
self.factor = 1
|
||||||
|
self.header = self.varint
|
||||||
|
self.length -= self.consumed
|
||||||
|
self.consumed = 0
|
||||||
|
self.varint = 0
|
||||||
|
if self.length < 0 or self.length > self.max_size:
|
||||||
|
raise RuntimeError("Incoming message too large")
|
||||||
|
else:
|
||||||
|
self.state = 0
|
||||||
|
self.message = b""
|
||||||
|
Loading…
Reference in New Issue
Block a user