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)