diff --git a/lib/nntp/tiny/buffer.py b/lib/nntp/tiny/buffer.py index cb224f4..997d0ad 100644 --- a/lib/nntp/tiny/buffer.py +++ b/lib/nntp/tiny/buffer.py @@ -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])