|
|
@@ -495,13 +495,12 @@ class IRCClientProtocol(asyncio.Protocol): |
|
|
|
|
|
|
|
def data_received(self, data): |
|
|
|
self.logger.debug(f'Data received: {data!r}') |
|
|
|
# Split received data on CRLF. If there's any data left in the buffer, prepend it to the first message and process that. |
|
|
|
# If there's any data left in the buffer, prepend it to the data. Split on CRLF. |
|
|
|
# Then, process all messages except the last one (since data might not end on a CRLF) and keep the remainder in the buffer. |
|
|
|
# If data does end with CRLF, all messages will have been processed and the buffer will be empty again. |
|
|
|
messages = data.split(b'\r\n') |
|
|
|
if self.buffer: |
|
|
|
self.message_received(self.buffer + messages[0]) |
|
|
|
messages = messages[1:] |
|
|
|
data = self.buffer + data |
|
|
|
messages = data.split(b'\r\n') |
|
|
|
for message in messages[:-1]: |
|
|
|
self.message_received(message) |
|
|
|
self.buffer = messages[-1] |
|
|
|