diff options
| author | 2018-08-29 14:33:27 +0100 | |
|---|---|---|
| committer | 2018-08-29 14:33:27 +0100 | |
| commit | 43ab3cbd102b365439b271f23bfa45da3cc03ab8 (patch) | |
| tree | ef01538da82f611e89cec8e4535cb607a636bc49 /IRCBot.py | |
| parent | Forgot to add IRCBuffer.py when I renamed it from IRCLog.py. oops. (diff) | |
| signature | ||
Factor ping interval and ping timeout in to the main loop's minimum interval
Diffstat (limited to 'IRCBot.py')
| -rw-r--r-- | IRCBot.py | 42 |
1 files changed, 23 insertions, 19 deletions
@@ -65,7 +65,7 @@ class Bot(object): next = None for timer in self.timers: time_left = timer.time_left() - if not next or time_left < next: + if next == None or time_left < next: next = time_left if next == None: @@ -83,18 +83,28 @@ class Bot(object): next = None for server in self.servers.values(): timeout = server.send_throttle_timeout() - if server.waiting_send() and (not next or timeout < next): + if server.waiting_send() and (next == None or timeout < next): next = timeout - if next == None: - return None - if next < 0: - return 0 return next + def next_ping(self): + timeouts = [] + for server in self.servers.values(): + timeouts.append(server.until_next_ping()) + return min(timeouts) + def next_read_timeout(self): + timeouts = [] + for server in self.servers.values(): + timeouts.append(server.until_read_timeout()) + return min(timeouts) + def get_poll_timeout(self): - next_timer = self.next_timer() or 30 - next_write = self.next_send() or 30 - return min(next_timer, next_write) + timeouts = [] + timeouts.append(self.next_timer()) + timeouts.append(self.next_send()) + timeouts.append(self.next_ping()) + timeouts.append(self.next_read_timeout()) + return min([timeout for timeout in timeouts if not timeout == None]) def register_read(self, server): self.poll.modify(server.fileno(), select.EPOLLIN) @@ -104,10 +114,6 @@ class Bot(object): self.poll.modify(server.fileno(), select.EPOLLIN|select.EPOLLOUT) - def since_last_read(self, server): - return None if not server.last_read else time.monotonic( - )-server.last_read - def disconnect(self, server): try: self.poll.unregister(server.fileno()) @@ -157,12 +163,10 @@ class Bot(object): server.disconnect() for server in list(self.servers.values()): - since_last_read = self.since_last_read(server) - if since_last_read: - if since_last_read > 120: - print("pingout from %s" % str(server)) - server.disconnect() - elif since_last_read > 30 and not server.ping_sent: + if server.read_timed_out(): + print("pingout from %s" % str(server)) + server.disconnect() + elif server.ping_due() and not server.ping_sent: server.send_ping() server.ping_sent = True if not server.connected: |
