from COM.COM_TCP import TCPClient
import queue
import json
from Model.RobotModel import DataAddress,DATARequest

class RobotClient(TCPClient):

    def __init__(self, ip, port, command_quene, status_model):
        super().__init__(ip, port)
        self.command_quene = command_quene
        self.status_model = status_model
        self.errorCommands = {}

    def add_sendQuene(self,command): #后面 命令分等级，紧急命令直接执行
        self.command_quene.put(command)
        return

    def send_Command(self):
        q = queue.Queue
        q.qsize()
        while True: # 让出时间间隔
            try:
                if self.command_quene.qsize()!=0:
                    command = self.command_quene.get()
                    self.client_socket.send(json.dumps(command).encode('utf-8'))

                    if False:
                        response = self.client_socket.recv(1024).decode('utf-8')
                        response_message = json.loads(response)
                        if True:
                            print('正确相应')
                        else:
                            self.errorCommands[json.dumps(command).encode('utf-8')] = response_message
                            print('出错')
            except Exception as e:
                print('连接断开')

        #return False

    def send_Status(self):
        request =  DATARequest()

        attributes = dir(DataAddress())

        # 移除特殊属性和方法
        attributes = [attr for attr in attributes if not attr.startswith('__')]
        request.queryAddr= attributes
        request_status_json = vars(request)
        # 转字符串
        while True:
            try:
                self.client_socket.send(json.dumps(request_status_json).encode('utf-8'))
                if False:
                    response = self.client_socket.recv(1024).decode('utf-8')
                    response_message = json.loads(response)
                    if True:
                        data_status = DATARequest()
                        data_status.__dict__ = response_message
                        data_address_array = data_status.queryAddr
                        data_Address = DataAddress()
                        for i in attributes.count():
                            setattr(data_Address,attributes[i],data_address_array[i])
                        self.status_model = data_Address
                    else:
                        print('转换失败')
            except Exception as e:
                print('连接断开')



        return False
