from __future__ import print_function
-import os, sys, select, MySQLdb, MySQLdb.cursors, time, random, gc
+import os, sys, select, MySQLdb, MySQLdb.cursors, time, traceback, random, gc
import bot, config, ctlmod
class Erebus(object): #singleton to pass around
self.po.register(fileno, select.POLLIN)
elif self.potype == "select":
self.fdlist.append(fileno)
+ def delfd(self, fileno):
+ del self.fds[fileno]
+ if self.potype == "poll":
+ self.po.unregister(fileno)
+ elif self.potype == "select":
+ self.fdlist.remove(fileno)
def bot(self, name): #get Bot() by name (nick)
return self.bots[name.lower()]
def loop():
poready = main.poll()
for fileno in poready:
- for line in main.fd(fileno).getdata():
- main.fd(fileno).parse(line)
+ try:
+ data = main.fd(fileno).getdata()
+ except:
+ main.log('*', '!', 'Super-mega-emergency: getdata raised exception for socket %d' % (fileno))
+ traceback.print_exc()
+ data = None
+ if data is None:
+ main.fd(fileno).close()
+ else:
+ for line in data:
+ try:
+ main.fd(fileno).parse(line)
+ except:
+ main.log('*', '!', 'Super-mega-emergency: parse raised exception for socket %d data %r' % (fileno, line))
+ traceback.print_exc()
if main.mustquit is not None:
main.log('*', '!', 'Core exiting due to: %s' % (main.mustquit))
raise main.mustquit