diff options
| author | 2018-10-06 15:37:05 +0100 | |
|---|---|---|
| committer | 2018-10-06 15:37:05 +0100 | |
| commit | 0794a5173ae2a45aad4f91f76a0fd0a9fe2939c4 (patch) | |
| tree | 6652a20f47bb0113d9a70b392533a608664b12a4 /src/IRCServer.py | |
| parent | Attempt to register servers for read/write when sending github hook notices (diff) | |
| signature | ||
Add a way to track non-IRC sockets within the main epoll loop; use this for a
unix domain control socket!
Diffstat (limited to 'src/IRCServer.py')
| -rw-r--r-- | src/IRCServer.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/IRCServer.py b/src/IRCServer.py index 35050ff3..c389efed 100644 --- a/src/IRCServer.py +++ b/src/IRCServer.py @@ -199,7 +199,7 @@ class Server(IRCObject.Object): for user in channel.users: user.part_channel(channel) del self.channels[channel.name] - def parse_line(self, line): + def parse_data(self, line): if not line: return self.events.on("raw").call(server=self, line=line) @@ -212,16 +212,22 @@ class Server(IRCObject.Object): def read(self): data = b"" try: - data = self.read_buffer + self.socket.recv(4096) + data = self.socket.recv(4096) except (ConnectionResetError, socket.timeout): self.disconnect() - return [] + return None + if not data: + self.disconnect() + return None + data = self.read_buffer+data self.read_buffer = b"" + data_lines = [line.strip(b"\r") for line in data.split(b"\n")] if data_lines[-1]: self.read_buffer = data_lines[-1] data_lines.pop(-1) decoded_lines = [] + for line in data_lines: try: line = line.decode(self.get_setting( @@ -233,8 +239,7 @@ class Server(IRCObject.Object): except: continue decoded_lines.append(line) - if not decoded_lines: - self.disconnect() + self.last_read = time.monotonic() self.ping_sent = False return decoded_lines |
