A much more sane buffer implementation

This commit is contained in:
XANTRONIX Development 2024-11-26 22:21:06 -05:00
parent 22f417e68e
commit 945f85c2a3

View file

@ -15,27 +15,28 @@ class OutputBuffer():
self.sock: socket.socket = sock
self.offset: int = 0
def write(self, data: bytes):
count = len(data)
remaining = count
while remaining > 0:
if self.offset >= self.size:
self.offset = 0
needed = self.size - self.offset
copy = min(needed, remaining)
self.buf[self.offset:self.offset+copy] = data[0:copy]
remaining -= copy
self.offset += copy
if self.offset >= self.size:
self.sock.send(self.buf)
self.offset = 0
def print(self, text: str, end: str="\r\n"):
data = bytes(text + end, 'utf-8')
count = len(data)
if count > self.size:
return self.sock.send(data)
if count + self.offset > self.size:
to_fill = self.size - self.offset
left = count - to_fill
self.buf[self.offset:self.size] = data[0:to_fill]
self.sock.send(self.buf)
self.offset = 0
self.buf[0:left] = data[to_fill:to_fill+left]
else:
self.buf[self.offset:self.offset+count] = data
self.offset += count
return self.write(bytes(text + end, 'utf-8'))
def flush(self):
self.sock.send(self.buf[0:self.offset])