--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fixbot/api/amp.py Sat Feb 20 22:31:17 2010 +0200
@@ -0,0 +1,95 @@
+from twisted.protocols import amp
+
+from fixbot.module import ModuleInfo, Event
+
+class CmdModuleRegister (amp.Command) :
+ """
+ Register module
+ """
+
+ arguments = [
+ ('name', amp.String()),
+ ]
+
+class CmdModuleEvent (amp.Command) :
+ """
+ Broadcast event
+ """
+
+ arguments = [
+ ('type', amp.String()),
+ ('msg', amp.String()),
+ ]
+
+class ServerProtocol (amp.AMP) :
+ """
+ Nexus-side command handler
+ """
+
+ # the registered ModuleInfo
+ module = None
+
+ @CmdModuleRegister.responder
+ def on_ModuleRegister (self, name) :
+ # construct the ModuleInfo
+ mi = ModuleInfo()
+ mi.name = name
+
+ # register
+ self.factory.nexus.registerModule(mi, self)
+ self.module = mi
+
+ # ok
+ return {}
+
+ @CmdModuleEvent.responder
+ def on_ModuleEvent (self, type, msg) :
+ # as Event
+ e = Event(self.module, type, msg)
+
+ # publish
+ self.factory.nexus.handleEvent(e)
+
+ # ok
+ return {}
+
+
+class ClientProtocol (amp.AMP) :
+ """
+ Module-side command sender/handler
+ """
+
+
+ def connectionMade (self) :
+ """
+ Connected to nexus, send ModuleRegister
+ """
+
+ # register
+ self.sendModuleRegister(self.factory.name).addCallback(self._ModuleRegisterOK)
+
+
+ def sendModuleRegister (self, name) :
+ """
+ Register with given module name
+ """
+
+ return self.callRemote(CmdModuleRegister, name=name)
+
+
+ def _ModuleRegisterOK (self, ret) :
+ """
+ Registered with nexus, commence operation
+ """
+
+ self.factory._onRegistered(self)
+
+
+ def sendEvent (self, event) :
+ """
+ Broadcast event to nexus
+ """
+
+ self.callRemote(CmdModuleEvent, type=event.type, msg=event.msg)
+
+