Esempio n. 1
0
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()
Esempio n. 2
0
 def shutdown(self):
     self.unsubscribe("GENSIG")
     ZmqSubConnection.shutdown(self)
Esempio n. 3
0
 def shutdown(self):
     self.unsubscribe("GENSIG")
     ZmqSubConnection.shutdown(self)