import msgpack cdef class RemoteCommand: def __init__(self, CommandType command_type, bytes data=None, str message=None): self.command_type = command_type self.data = data self.message = message def __str__(self): command_type_names = { 3: "OK", 10: "LOGIN", 12: "CHECK_RESOURCE", 15: "LIST_REQUEST", 18: "LIST_FILES", 20: "LOAD", 22: "LOAD_BIG_SMALL", 24: "UPLOAD_BIG_SMALL", 25: "DATA_BYTES", 30: "INFERENCE", 35: "INFERENCE_DATA", 40: "STOP_INFERENCE", 80: "AI_AVAILABILITY_CHECK", 85: "AI_AVAILABILITY_RESULT", 90: "ERROR", 100: "EXIT" } data_str = f'{len(self.data)} bytes' if self.data else '' return f'{command_type_names[self.command_type]} ({data_str})' @staticmethod cdef from_msgpack(bytes data): unpacked = msgpack.unpackb(data, strict_map_key=False) return RemoteCommand(unpacked.get("CommandType"), unpacked.get("Data"), unpacked.get("Message")) cdef bytes serialize(self): return msgpack.packb({ "CommandType": self.command_type, "Data": self.data, "Message": self.message })