SDK-2910: Fix readline

This commit is contained in:
Romuald Juchnowicz-Bierbasz
2019-06-28 11:58:32 +02:00
parent 692bdbf370
commit 77d742ce18

View File

@@ -74,7 +74,7 @@ class Server():
self._notifications = {}
self._eof_listeners = []
self._input_buffer = bytes()
self._input_buffer_it = 0
self._processed_input_buffer_it = 0
def register_method(self, name, callback, internal, sensitive_params=False):
"""
@@ -120,18 +120,21 @@ class Server():
async def _readline(self):
"""Like StreamReader.readline but without limit"""
while True:
chunk = await self._reader.read(1024)
self._input_buffer += chunk
it = self._input_buffer.find(b"\n", self._input_buffer_it)
if it < 0:
# check if there is no unprocessed data in the buffer
if not self._input_buffer or self._processed_input_buffer_it != 0:
chunk = await self._reader.read(1024)
if not chunk:
return bytes() # EOF
else:
self._input_buffer_it = len(self._input_buffer)
continue
self._input_buffer += chunk
it = self._input_buffer.find(b"\n", self._processed_input_buffer_it)
if it < 0:
self._processed_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
self._processed_input_buffer_it = 0
return line
def stop(self):