fixbot/api/amp.py
changeset 62 e4db89a5f6bc
child 64 8574aeff9b36
equal deleted inserted replaced
61:1e26ee53381f 62:e4db89a5f6bc
       
     1 from twisted.protocols import amp
       
     2 
       
     3 from fixbot.module import ModuleInfo, Event
       
     4 
       
     5 class CmdModuleRegister (amp.Command) :
       
     6     """
       
     7         Register module
       
     8     """
       
     9 
       
    10     arguments = [
       
    11         ('name',    amp.String()),
       
    12     ]
       
    13 
       
    14 class CmdModuleEvent (amp.Command) :
       
    15     """
       
    16         Broadcast event
       
    17     """
       
    18 
       
    19     arguments = [
       
    20         ('type',    amp.String()),
       
    21         ('msg',     amp.String()),
       
    22     ]
       
    23 
       
    24 class ServerProtocol (amp.AMP) :
       
    25     """
       
    26         Nexus-side command handler
       
    27     """
       
    28 
       
    29     # the registered ModuleInfo
       
    30     module = None
       
    31     
       
    32     @CmdModuleRegister.responder
       
    33     def on_ModuleRegister (self, name) :
       
    34         # construct the ModuleInfo
       
    35         mi = ModuleInfo()
       
    36         mi.name = name
       
    37         
       
    38         # register
       
    39         self.factory.nexus.registerModule(mi, self)
       
    40         self.module = mi
       
    41 
       
    42         # ok
       
    43         return {}
       
    44 
       
    45     @CmdModuleEvent.responder
       
    46     def on_ModuleEvent (self, type, msg) :
       
    47         # as Event
       
    48         e = Event(self.module, type, msg)
       
    49         
       
    50         # publish
       
    51         self.factory.nexus.handleEvent(e)
       
    52 
       
    53         # ok
       
    54         return {}
       
    55 
       
    56 
       
    57 class ClientProtocol (amp.AMP) :
       
    58     """
       
    59         Module-side command sender/handler
       
    60     """
       
    61     
       
    62 
       
    63     def connectionMade (self) :
       
    64         """
       
    65             Connected to nexus, send ModuleRegister
       
    66         """
       
    67         
       
    68         # register
       
    69         self.sendModuleRegister(self.factory.name).addCallback(self._ModuleRegisterOK)
       
    70     
       
    71 
       
    72     def sendModuleRegister (self, name) :
       
    73         """
       
    74             Register with given module name
       
    75         """
       
    76 
       
    77         return self.callRemote(CmdModuleRegister, name=name)
       
    78 
       
    79 
       
    80     def _ModuleRegisterOK (self, ret) :
       
    81         """
       
    82             Registered with nexus, commence operation
       
    83         """
       
    84 
       
    85         self.factory._onRegistered(self)
       
    86 
       
    87 
       
    88     def sendEvent (self, event) :
       
    89         """
       
    90             Broadcast event to nexus
       
    91         """
       
    92         
       
    93         self.callRemote(CmdModuleEvent, type=event.type, msg=event.msg)
       
    94 
       
    95