From d8cce800d16818a1a49f7b087b90aaabd81eda97 Mon Sep 17 00:00:00 2001 From: jesopo Date: Wed, 30 Mar 2016 19:32:14 +0100 Subject: [PATCH] added untested reconnection code. --- IRCBot.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/IRCBot.py b/IRCBot.py index 578f7a69..ac3d202f 100644 --- a/IRCBot.py +++ b/IRCBot.py @@ -29,11 +29,11 @@ class Bot(object): sys.stderr.write("Failed to connect to %s\n" % str(server)) traceback.print_exc() return False + self.poll.register(server.fileno(), select.EPOLLOUT) return True def connect_all(self): for server in self.servers.values(): - if self.connect(server): - self.poll.register(server.fileno(), select.EPOLLOUT) + self.connect(server) def add_timer(self, function, delay, *args, **kwargs): timer = Timer.Timer(function, delay, *args, **kwargs) @@ -64,6 +64,15 @@ class Bot(object): def since_last_read(self, server): return time.time()-server.last_read + def disconnect(self, server): + self.poll.unregister(server.fileno()) + del self.servers[server.fileno()] + + def reconnect(self, server): + IRCServer.Server.__init__(server) + if self.connect(server): + self.servers[server.fileno()] = server + def run(self): while self.running: self.lock.acquire() @@ -92,10 +101,13 @@ class Bot(object): print("pingout from %s" % str(server)) server.disconnect() if not server.connected: - self.poll.unregister(server.fileno()) - del self.servers[server.fileno()] - # add reconnect here - print("disconnected from %s" % str(server)) + self.disconnect(server) + + reconnect_delay = self.config.get("reconnect-delay", 10) + self.add_timer(self.reconnect, reconnect_delay, server) + + print("disconnected from %s, reconnecting in %d seconds" % ( + str(server), reconnect_delay)) elif server.waiting_send(): self.register_both(server) self.lock.release()