api.py
changeset 6 614161f85d9b
parent 4 34d7897bd0f5
equal deleted inserted replaced
5:8e7493df9f52 6:614161f85d9b
     1 from twisted.internet import protocol, reactor
     1 from twisted.internet import protocol, reactor
     2 from twisted.python import log
     2 from twisted.python import log
     3 from datetime import datetime
     3 from datetime import datetime
       
     4 import sys
     4 
     5 
     5 import buffer
     6 import buffer
     6 
     7 
     7 PORT            = 34888
     8 PORT            = 34888
     8 SERVER_HOST     = "127.0.0.1"
     9 SERVER_HOST     = "127.0.0.1"
       
    10 
       
    11 from api_secret import secret
     9 
    12 
    10 class ModuleInfo (object) :
    13 class ModuleInfo (object) :
    11     """
    14     """
    12         Some info about a module
    15         Some info about a module
    13     """
    16     """
    94             self.factory.nexus.unregisterModule(self.module, reason.getErrorMessage())
    97             self.factory.nexus.unregisterModule(self.module, reason.getErrorMessage())
    95 
    98 
    96     def on_module_init (self, i) :
    99     def on_module_init (self, i) :
    97         self._assert(not self.module, "module_init with non-None self.module")
   100         self._assert(not self.module, "module_init with non-None self.module")
    98 
   101 
       
   102         peer_secret = i.readVarLen('B')
       
   103         
       
   104         self._assert(peer_secret == secret, "Mismatching API secrets!")
       
   105 
    99         m = ModuleInfo()
   106         m = ModuleInfo()
   100         
   107         
   101         m.name = i.readVarLen('B')
   108         m.name = i.readVarLen('B')
   102         m.version = i.readItem('H')
   109         m.version = i.readItem('H')
   103 
   110 
   130 
   137 
   131     def logPrefix (self) :
   138     def logPrefix (self) :
   132         if self.module :
   139         if self.module :
   133             return str(self.module)
   140             return str(self.module)
   134         else :
   141         else :
   135             return super(APIProtocol, self).logPrefix()
   142             return super(ServerProtocol, self).logPrefix()
   136 
   143 
   137 class ClientProtocol (buffer.StreamProtocol, protocol.Protocol) :
   144 class ClientProtocol (buffer.StreamProtocol, protocol.Protocol) :
   138     RECV_COMMANDS = SERVER_COMMANDS
   145     RECV_COMMANDS = SERVER_COMMANDS
   139     SEND_COMMANDS = CLIENT_COMMANDS
   146     SEND_COMMANDS = CLIENT_COMMANDS
   140 
   147 
   141     def connectionMade (self) :
   148     def connectionMade (self) :
   142         log.msg("Connected to API server, sending module init message")
   149         log.msg("Connected to API server, sending module init message")
   143 
   150 
   144         o = self.startCommand('module_init')
   151         o = self.startCommand('module_init')
       
   152         o.writeVarLen('B', secret)
   145         o.writeVarLen('B', self.factory.name)
   153         o.writeVarLen('B', self.factory.name)
   146         o.writeItem("H", self.factory.version)
   154         o.writeItem("H", self.factory.version)
   147         buffer.writeStringStream(o, 'B', self.factory.event_types)
   155         buffer.writeStringStream(o, 'B', self.factory.event_types)
   148 
   156 
   149         self.send(o)
   157         self.send(o)
   169     def __init__ (self) :
   177     def __init__ (self) :
   170         log.msg("Connecting to %s:%d" % (SERVER_HOST, PORT))
   178         log.msg("Connecting to %s:%d" % (SERVER_HOST, PORT))
   171         reactor.connectTCP(SERVER_HOST, PORT, self)
   179         reactor.connectTCP(SERVER_HOST, PORT, self)
   172 
   180 
   173         self.connection = None
   181         self.connection = None
       
   182 
       
   183     def run (self) :
       
   184         log.startLogging(sys.stderr)
       
   185     
       
   186         reactor.run()
   174         
   187         
   175     def connected (self, connection) :
   188     def connected (self, connection) :
   176         log.msg("Connected!")
   189         log.msg("Connected!")
   177         self.connection = connection
   190         self.connection = connection
   178 
   191