SDK-2880: Fix readline

This commit is contained in:
Romuald Juchnowicz-Bierbasz
2019-06-26 12:02:25 +02:00
parent 05042fe430
commit 207b1e1313
2 changed files with 46 additions and 6 deletions

View File

@@ -74,6 +74,7 @@ class Server():
self._notifications = {}
self._eof_listeners = []
self._input_buffer = bytes()
self._input_buffer_it = 0
def register_method(self, name, callback, internal, sensitive_params=False):
"""
@@ -120,15 +121,17 @@ class Server():
"""Like StreamReader.readline but without limit"""
while True:
chunk = await self._reader.read(1024)
if not chunk:
return chunk
previous_size = len(self._input_buffer)
self._input_buffer += chunk
it = self._input_buffer.find(b"\n", previous_size)
it = self._input_buffer.find(b"\n", self._input_buffer_it)
if it < 0:
continue
if not chunk:
return bytes() # EOF
else:
self._input_buffer_it = len(self._input_buffer)
continue
line = self._input_buffer[:it]
self._input_buffer = self._input_buffer[it+1:]
self._input_buffer_it = 0
return line
def stop(self):