A much more sane buffer implementation
This commit is contained in:
parent
22f417e68e
commit
945f85c2a3
1 changed files with 21 additions and 20 deletions
|
@ -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])
|
||||
|
|
Loading…
Add table
Reference in a new issue