terom@0: from twisted.internet import reactor, protocol terom@0: from twisted.python import log terom@4: import sys terom@0: terom@4: import irc, api terom@0: terom@0: class IRCFactory (protocol.ClientFactory) : terom@4: protocol = irc.BotProtocol terom@0: terom@4: def __init__ (self, nexus) : terom@4: self.nexus = nexus terom@4: terom@4: log.msg("Connection to IRC at %s:%d" % (irc.HOSTNAME, irc.PORT)) terom@4: reactor.connectTCP(irc.HOSTNAME, irc.PORT, self) terom@4: terom@4: self.connection = None terom@4: terom@4: def connected (self, connection) : terom@4: self.connection = connection terom@4: terom@4: class APIFactory (protocol.ServerFactory) : terom@4: protocol = api.ServerProtocol terom@4: terom@4: def __init__ (self, nexus) : terom@4: self.nexus = nexus terom@4: terom@4: log.msg("API listening on %s:%d" % (api.SERVER_HOST, api.PORT)) terom@4: reactor.listenTCP(api.PORT, self, interface=api.SERVER_HOST) terom@4: terom@4: class Nexus (object) : terom@0: def __init__ (self) : terom@4: self.modules = dict() terom@0: terom@4: self.irc = IRCFactory(self) terom@4: self.api = APIFactory(self) terom@4: terom@4: def registerModule (self, module, transport) : terom@4: self.modules[module.name] = (module, transport) terom@4: terom@4: self.irc.connection.moduleConnected(module, transport.transport.getPeer()) terom@4: terom@4: def unregisterModule (self, module, reason) : terom@4: del self.modules[module.name] terom@4: terom@4: self.irc.connection.moduleDisconnected(module, reason) terom@4: terom@4: def handleEvent (self, event) : terom@4: self.irc.connection.sendEvent(event) terom@6: terom@6: def getModules (self) : terom@6: return (module for (module, transport) in self.modules.itervalues()) terom@6: terom@6: def getModuleInfo (self, name) : terom@6: module, connection = self.modules[name] terom@6: terom@6: return module, connection.transport.getPeer() terom@4: terom@4: if __name__ == '__main__' : terom@4: log.startLogging(sys.stderr) terom@4: terom@4: nexus = Nexus() terom@4: reactor.run() terom@4: