def remote_register_engine(self, engine_reference, id=None, pid=None, pproperties=None): # First adapt the engine_reference to a basic non-queued engine engine = IEngineBase(engine_reference) if pproperties: engine.properties = pickle.loads(pproperties) # Make it an IQueuedEngine before registration remote_engine = IEngineQueued(engine) # Get the ip/port of the remote side peer_address = engine_reference.tracker.broker.transport.getPeer() ip = peer_address.host port = peer_address.port reg_dict = self.service.register_engine(remote_engine, id, ip, port, pid) # Now setup callback for disconnect and unregistering the engine def notify(*args): return self.service.unregister_engine(reg_dict['id']) engine_reference.tracker.broker.notifyOnDisconnect(notify) engine.notifier = notify engine.stopNotifying = engine_reference.tracker.broker.dontNotifyOnDisconnect return reg_dict
def __init__(self, service): assert IEngineBase.providedBy(service), \ "IEngineBase is not provided by" + repr(service) self.service = service self.collectors = {}