コード例 #1
0
ファイル: control_thread.py プロジェクト: bssthu/rtk_trans
    def resolve_command(self):
        """解析来自控制端口的数据

        首先寻找指令起始标记,找不到就从 buffer 头删除一个字节,再继续寻找。
        然后调用 resolve_command_from_begin() 从 buffer 的开头开始解析,直到遇到结尾标记为止。
        """
        if self.is_transparency and len(self.buffer) > 0:
            # 透传模式
            command = b'send:' + bytes(self.buffer[:])
            self.buffer.clear()
            log.info('control command: %s' % command)
            self.got_command_cb(command)

        while len(self.buffer) >= 4:
            # 解析指令
            try:
                if self.is_in_command:      # 指令从 buffer[0] 开始
                    command = self.resolve_command_from_begin()
                    if self.is_in_command:      # 没有遇到结尾,收到的指令还不完整
                        break
                    elif command is not None:   # 收到了指令
                        log.info('control command: %s' % command)
                        self.got_command_cb(command)
                        if command == b'%MODE1':
                            # 透传模式
                            self.is_transparency = True
                            break
                elif self.buffer[:4] == CMD_BEGIN:  # begin of command
                    self.is_in_command = True
                else:
                    del self.buffer[0]      # 出队一个字节
            except Exception as e:
                log.warning('control thread resolve: %s' % e)
コード例 #2
0
    def update_rcv_time(name):
        """接收到 rtk 数据,更新时间戳

        Args:
            name (str): rtk 服务名
        """
        try:
            # 此处可能不是很线程安全
            if name in RtkStatus.rtk_last_rcv_time.keys():
                RtkStatus.rtk_last_rcv_time[name] = get_time_string()
                RtkStatus.update_status(name, RtkStatus.S_RECEIVING)
        except Exception as e:
            log.warning('Failed when update rcv time: %s' % e)
コード例 #3
0
ファイル: http_thread.py プロジェクト: bssthu/rtk_trans
    def update_rcv_time(name):
        """接收到 rtk 数据,更新时间戳

        Args:
            name (str): rtk 服务名
        """
        try:
            # 此处可能不是很线程安全
            if name in RtkStatus.rtk_last_rcv_time.keys():
                RtkStatus.rtk_last_rcv_time[name] = get_time_string()
                RtkStatus.update_status(name, RtkStatus.S_RECEIVING)
        except Exception as e:
            log.warning("Failed when update rcv time: %s" % e)
コード例 #4
0
    def update_status(name, status):
        """接收到 rtk 状态更新

        Args:
            name (str): rtk 服务名
            status (str): 服务当前状态, None 表示只 update_rcv_time
        """
        if status is None:
            RtkStatus.update_rcv_time(name)
        else:
            try:
                if name in RtkStatus.rtk_status.keys():
                    if status == RtkStatus.S_CONNECTED:
                        if RtkStatus.rtk_status[name] not in (RtkStatus.S_UNKNOWN, RtkStatus.S_DISCONNECTED):
                            # 特殊处理 S_CONNECTED,如果已经有连接,就不更新状态
                            return
                    RtkStatus.rtk_status[name] = status
            except Exception as e:
                log.warning('Failed when update status: %s' % e)
コード例 #5
0
ファイル: http_thread.py プロジェクト: bssthu/rtk_trans
    def update_status(name, status):
        """接收到 rtk 状态更新

        Args:
            name (str): rtk 服务名
            status (str): 服务当前状态, None 表示只 update_rcv_time
        """
        if status is None:
            RtkStatus.update_rcv_time(name)
        else:
            try:
                if name in RtkStatus.rtk_status.keys():
                    if status == RtkStatus.S_CONNECTED:
                        if RtkStatus.rtk_status[name] not in (RtkStatus.S_UNKNOWN, RtkStatus.S_DISCONNECTED):
                            # 特殊处理 S_CONNECTED,如果已经有连接,就不更新状态
                            return
                    RtkStatus.rtk_status[name] = status
            except Exception as e:
                log.warning("Failed when update status: %s" % e)