nexus.py
author Tero Marttila <terom@paivola.fi>
Thu, 20 Mar 2008 18:47:58 +0200
changeset 5 8e7493df9f52
parent 4 34d7897bd0f5
child 6 614161f85d9b
permissions -rw-r--r--
dos2unix on buffer.py

committer: Tero Marttila <terom@paivola.fi>
from twisted.internet import reactor, protocol
from twisted.python import log
import sys

import irc, api

class IRCFactory (protocol.ClientFactory) :
    protocol = irc.BotProtocol

    def __init__ (self, nexus) :
        self.nexus = nexus
        
        log.msg("Connection to IRC at %s:%d" % (irc.HOSTNAME, irc.PORT))
        reactor.connectTCP(irc.HOSTNAME, irc.PORT, self)

        self.connection = None
    
    def connected (self, connection) :
        self.connection = connection

class APIFactory (protocol.ServerFactory) :
    protocol = api.ServerProtocol

    def __init__ (self, nexus) :
        self.nexus = nexus
        
        log.msg("API listening on %s:%d" % (api.SERVER_HOST, api.PORT))
        reactor.listenTCP(api.PORT, self, interface=api.SERVER_HOST)

class Nexus (object) :
    def __init__ (self) :
        self.modules = dict()

        self.irc = IRCFactory(self)
        self.api = APIFactory(self)

    def registerModule (self, module, transport) :
        self.modules[module.name] = (module, transport)

        self.irc.connection.moduleConnected(module, transport.transport.getPeer())

    def unregisterModule (self, module, reason) :
        del self.modules[module.name]

        self.irc.connection.moduleDisconnected(module, reason)
    
    def handleEvent (self, event) :
        self.irc.connection.sendEvent(event)
        
if __name__ == '__main__' :
    log.startLogging(sys.stderr)

    nexus = Nexus()
    reactor.run()