3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-12-26 12:43:09 +01:00

Fixes for connection handling?

XXX: using SQUIT on the PyLink server doesn't respect autoconnect delays; why?
This commit is contained in:
James Lu 2015-07-17 15:08:24 -07:00
parent 836d0e9701
commit f41e1a2eb5
3 changed files with 17 additions and 18 deletions

View File

@ -77,10 +77,11 @@ class Irc():
self.schedulePing() self.schedulePing()
self.run() self.run()
except (socket.error, classes.ProtocolError, ConnectionError) as e: except (socket.error, classes.ProtocolError, ConnectionError) as e:
log.warning('(%s) Failed to connect to IRC: %s: %s', log.warning('(%s) Disconnected from IRC: %s: %s',
self.name, type(e).__name__, str(e)) self.name, type(e).__name__, str(e))
self.disconnect() self.disconnect()
autoconnect = self.serverdata.get('autoconnect') autoconnect = self.serverdata.get('autoconnect')
log.debug('(%s) Autoconnect delay set to %s seconds.', self.name, autoconnect)
if autoconnect is not None and autoconnect >= 0: if autoconnect is not None and autoconnect >= 0:
log.info('(%s) Going to auto-reconnect in %s seconds.', self.name, autoconnect) log.info('(%s) Going to auto-reconnect in %s seconds.', self.name, autoconnect)
time.sleep(autoconnect) time.sleep(autoconnect)
@ -103,7 +104,6 @@ class Irc():
while (time.time() - self.lastping) < self.pingtimeout: while (time.time() - self.lastping) < self.pingtimeout:
log.debug('(%s) time_since_last_ping: %s', self.name, (time.time() - self.lastping)) log.debug('(%s) time_since_last_ping: %s', self.name, (time.time() - self.lastping))
log.debug('(%s) self.pingtimeout: %s', self.name, self.pingtimeout) log.debug('(%s) self.pingtimeout: %s', self.name, self.pingtimeout)
try:
data = self.socket.recv(2048).decode("utf-8") data = self.socket.recv(2048).decode("utf-8")
buf += data buf += data
if not data: if not data:
@ -112,11 +112,6 @@ class Irc():
line, buf = buf.split('\n', 1) line, buf = buf.split('\n', 1)
log.debug("(%s) <- %s", self.name, line) log.debug("(%s) <- %s", self.name, line)
proto.handle_events(self, line) proto.handle_events(self, line)
except (socket.error, classes.ProtocolError, ConnectionError) as e:
log.warning('(%s) Disconnected from IRC: %s: %s',
self.name, type(e).__name__, str(e))
break
self.disconnect()
def send(self, data): def send(self, data):
# Safeguard against newlines in input!! Otherwise, each line gets # Safeguard against newlines in input!! Otherwise, each line gets

View File

@ -684,6 +684,7 @@ def initializeAll(irc):
for link in entrydata['links']: for link in entrydata['links']:
network, channel = link network, channel = link
initializeChannel(irc, channel) initializeChannel(irc, channel)
def main(): def main():
loadDB() loadDB()
utils.schedulers['relaydb'] = scheduler = sched.scheduler() utils.schedulers['relaydb'] = scheduler = sched.scheduler()
@ -693,3 +694,7 @@ def main():
thread = threading.Thread(target=scheduler.run) thread = threading.Thread(target=scheduler.run)
thread.daemon = True thread.daemon = True
thread.start() thread.start()
def handle_endburst(irc, numeric, command, args):
initializeAll(irc)
utils.add_hook(handle_endburst, "ENDBURST")

View File

@ -38,15 +38,14 @@ def spawnClient(irc, nick, ident='null', host='null', realhost=None, modes=set()
realname = realname or irc.botdata['realname'] realname = realname or irc.botdata['realname']
realhost = realhost or host realhost = realhost or host
raw_modes = utils.joinModes(modes) raw_modes = utils.joinModes(modes)
u = irc.users[uid] = IrcUser(nick, ts, uid, ident=ident, host=host, realname=realname,
realhost=realhost, ip=ip, modes=modes)
irc.servers[server].users.append(uid)
_send(irc, server, "UID {uid} {ts} {nick} {realhost} {host} {ident} {ip}" _send(irc, server, "UID {uid} {ts} {nick} {realhost} {host} {ident} {ip}"
" {ts} {modes} + :{realname}".format(ts=ts, host=host, " {ts} {modes} + :{realname}".format(ts=ts, host=host,
nick=nick, ident=ident, uid=uid, nick=nick, ident=ident, uid=uid,
modes=raw_modes, ip=ip, realname=realname, modes=raw_modes, ip=ip, realname=realname,
realhost=realhost)) realhost=realhost))
# XXX Deduplicate the code here
u = irc.users[uid] = IrcUser(nick, ts, uid, ident=ident, host=host, realname=realname,
realhost=realhost, ip=ip, modes=modes)
irc.servers[server].users.append(uid)
return u return u
def joinClient(irc, client, channel): def joinClient(irc, client, channel):