api.py
author Tero Marttila <terom@fixme.fi>
Wed, 26 Mar 2008 01:12:11 +0200
changeset 15 e31e38d654b6
parent 6 614161f85d9b
permissions -rw-r--r--
some forgotten commits

committer: Tero Marttila <terom@fixme.fi>
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
     1
from twisted.internet import protocol, reactor
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
     2
from twisted.python import log
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
from datetime import datetime
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
     4
import sys
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
import buffer
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
     8
PORT            = 34888
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
     9
SERVER_HOST     = "127.0.0.1"
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    11
from api_secret import secret
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    12
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
class ModuleInfo (object) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
    """
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        Some info about a module
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    """
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    # module's name
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    name = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
    # module's version, as a 16-bit integer
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
    version = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    # list of valid event types (strings)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
    event_types = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
    def __str__ (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
        return "Module %s:%d" % (self.name, self.version)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
    def __repr__ (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
        return "<module %s:%d with events: %s>" % (self.name, self.version, ", ".join(self.event_types))
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
class Event (object) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    # the ModuleInfo object
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    module = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
    # the event type as a string
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    type = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    # event message as a string (under 255 bytes in length!)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
    msg = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
    # timestamp as a datetime.datetime
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    when = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
    def __init__ (self, module, type, msg) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        assert type in module.event_types, "Invalid event-type %s for %r" % (type, self.module)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
        self.module = module
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        self.type = type
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        self.msg = msg
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
        self.when = datetime.now()
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
    def __str__ (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
        return "[%s] %s" % (self.type, self.msg)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    def __repr__ (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        return "%s @ %s" % (self.type, self.when)
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    60
 
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    61
CLIENT_COMMANDS = [
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    62
    "module_init",
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    63
    "module_event",
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    64
]
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    65
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    66
SERVER_COMMANDS = [
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    67
    "module_ok",
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    68
]
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    69
       
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
class ServerProtocol (buffer.StreamProtocol, protocol.Protocol) :
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    71
    RECV_COMMANDS = CLIENT_COMMANDS
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    72
    SEND_COMMANDS = SERVER_COMMANDS    
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    VALID_STATES = [
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
        "wait_init",
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        "wait_event"
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    ]
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    # proto state
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
    state = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
    # module info
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
    module = None
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
    def _assert (self, condition, msg) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
        if not condition :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
            self.transport.loseConnection()
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
            log.err("assert failed in APIProtocol for %s: %s" % (self.module, msg))
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
    def connectionMade (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
        log.msg("Client connected")
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    93
    def connectionLost (self, reason) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    94
        log.msg("Connection lost: %s" % reason)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    95
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    96
        if self.module :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    97
            self.factory.nexus.unregisterModule(self.module, reason.getErrorMessage())
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    98
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
    def on_module_init (self, i) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        self._assert(not self.module, "module_init with non-None self.module")
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   102
        peer_secret = i.readVarLen('B')
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   103
        
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   104
        self._assert(peer_secret == secret, "Mismatching API secrets!")
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   105
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   106
        m = ModuleInfo()
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
        m.name = i.readVarLen('B')
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
        m.version = i.readItem('H')
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   111
        m.event_types = list(buffer.readStringStream(i, 'B'))
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
        m.addr = self.transport.getPeer()
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   114
        self.module_name = m.name
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   116
        log.msg("Got mod_init for %r" % m)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   117
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   118
        self.factory.nexus.registerModule(m, self)
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   120
        self.module = m
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   121
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   122
        o = self.startCommand('module_ok')
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   123
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   124
        self.send(o)
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
    def on_module_event (self, i) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
        self._assert(self.module, "module_event with None self.module!")
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
        event_type = i.readEnum(self.module.event_types)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        event_msg = i.readVarLen('B')
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
        
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   132
        e = Event(self.module, event_type, event_msg)
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   134
        log.msg("Got mod_event of %r" % (e))
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        self.factory.nexus.handleEvent(e)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
    def logPrefix (self) :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        if self.module :
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
            return str(self.module)
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        else :
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   142
            return super(ServerProtocol, self).logPrefix()
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   144
class ClientProtocol (buffer.StreamProtocol, protocol.Protocol) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   145
    RECV_COMMANDS = SERVER_COMMANDS
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   146
    SEND_COMMANDS = CLIENT_COMMANDS
1
16d7aadc6f31 initial, modified code
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   148
    def connectionMade (self) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   149
        log.msg("Connected to API server, sending module init message")
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   150
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   151
        o = self.startCommand('module_init')
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   152
        o.writeVarLen('B', secret)
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   153
        o.writeVarLen('B', self.factory.name)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   154
        o.writeItem("H", self.factory.version)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   155
        buffer.writeStringStream(o, 'B', self.factory.event_types)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   156
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   157
        self.send(o)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   158
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   159
    def sendEvent (self, event) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   160
        o = self.startCommand('module_event')
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   161
        o.writeEnum(self.factory.event_types, event.type)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   162
        o.writeVarLen('B', event.msg)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   163
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   164
        self.send(o)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   165
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   166
    def on_module_ok (self, i) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   167
        log.msg("Registration OK")
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   168
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   169
        self.factory.connected(self)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   170
    
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   171
    def logPrefix (self) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   172
        return "module %s:%d client" % (self.factory.name, self.factory.version)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   173
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   174
class Module (ModuleInfo, protocol.ClientFactory) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   175
    protocol = ClientProtocol
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   176
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   177
    def __init__ (self) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   178
        log.msg("Connecting to %s:%d" % (SERVER_HOST, PORT))
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   179
        reactor.connectTCP(SERVER_HOST, PORT, self)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   180
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   181
        self.connection = None
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   182
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   183
    def run (self) :
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   184
        log.startLogging(sys.stderr)
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   185
    
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   186
        reactor.run()
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   187
        
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   188
    def connected (self, connection) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   189
        log.msg("Connected!")
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   190
        self.connection = connection
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   191
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   192
        self.handleConnect()
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   193
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   194
    def disconnect (self) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   195
        self.connection.transport.loseConnection()
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   196
    
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   197
    def sendEvent (self, type, msg) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   198
        self.connection.sendEvent(self.buildEvent(type, msg))
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   199
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   200
    def buildEvent (self, type, msg) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   201
        return Event(self, type, msg)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   202
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   203
    def handleConnect (self) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   204
        """
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   205
            Do something
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   206
        """
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   207
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   208
        pass
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   209