class SubModel(): ''' zmq 订阅者模型 ''' def __init__(self, endpoint, callBack=None): try: if endpoint: logger.debug("开始运行 SUB 客户端 , 连接的服务器地址为:{}...".format(endpoint)) self._sub = ZmqSubConnection(ZmqFactory(), ZmqEndpoint("connect", endpoint)) if callBack: self.setCallback(callBack) else: self.setCallback(self.doDataReceived) except Exception as e: logger.error(e) def subscribe(self, topics=None): if self._sub: self._sub.unsubscribe(b"") if isinstance(topics, List): for topic in topics: self._subscribe(topic) else: self._subscribe(topics) else: logger.error("设置过滤器之前请初始化 SUB 端口") def _subscribe(self, topic=None): if topic: if isinstance(topic, bytes): self._sub.subscribe(topic) elif isinstance(topic, str): self._sub.subscribe(topic.encode()) def subscribeAll(self): self._sub.subscribe(b'') def setCallback(self, callBack): if self._sub: self._sub.gotMessage = callBack else: logger.error("绑定回调前请初始化 SUB 端口") def doDataReceived(self, *args): ''' 当接收到广播数据时,会触发该函数 :param data: :return: ''' logger.debug(f"rcev zmq msg : {args}") def shutdown(self): self._sub.shutdown()
def shutdown(self): self.unsubscribe("GENSIG") ZmqSubConnection.shutdown(self)