nexus.py
author Tero Marttila <terom@paivola.fi>
Fri, 21 Mar 2008 02:02:52 +0200
changeset 8 3d648daf9538
parent 6 614161f85d9b
child 9 75cc996c6ba1
permissions -rw-r--r--
WtmpFile && follow_main

committer: Tero Marttila <terom@paivola.fi>
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
from twisted.internet import reactor, protocol
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
from twisted.python import log
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
     3
import sys
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
     5
import irc, api
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
class IRCFactory (protocol.ClientFactory) :
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
     8
    protocol = irc.BotProtocol
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    10
    def __init__ (self, nexus) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    11
        self.nexus = nexus
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    12
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    13
        log.msg("Connection to IRC at %s:%d" % (irc.HOSTNAME, irc.PORT))
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    14
        reactor.connectTCP(irc.HOSTNAME, irc.PORT, self)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    15
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    16
        self.connection = None
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    17
    
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    18
    def connected (self, connection) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    19
        self.connection = connection
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    20
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    21
class APIFactory (protocol.ServerFactory) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    22
    protocol = api.ServerProtocol
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    23
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    24
    def __init__ (self, nexus) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    25
        self.nexus = nexus
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    26
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    27
        log.msg("API listening on %s:%d" % (api.SERVER_HOST, api.PORT))
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    28
        reactor.listenTCP(api.PORT, self, interface=api.SERVER_HOST)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    29
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    30
class Nexus (object) :
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    def __init__ (self) :
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    32
        self.modules = dict()
0
b610bb7f8823 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    34
        self.irc = IRCFactory(self)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    35
        self.api = APIFactory(self)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    36
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    37
    def registerModule (self, module, transport) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    38
        self.modules[module.name] = (module, transport)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    39
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    40
        self.irc.connection.moduleConnected(module, transport.transport.getPeer())
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    41
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    42
    def unregisterModule (self, module, reason) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    43
        del self.modules[module.name]
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    44
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    45
        self.irc.connection.moduleDisconnected(module, reason)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    46
    
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    47
    def handleEvent (self, event) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    48
        self.irc.connection.sendEvent(event)
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    49
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    50
    def getModules (self) :
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    51
        return (module for (module, transport) in self.modules.itervalues())
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    52
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    53
    def getModuleInfo (self, name) :
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    54
        module, connection = self.modules[name]
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    55
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    56
        return module, connection.transport.getPeer()
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    57
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    58
if __name__ == '__main__' :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    59
    log.startLogging(sys.stderr)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    60
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    61
    nexus = Nexus()
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    62
    reactor.run()
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
    63