import msgpack cdef class RemoteCommand: def __init__(self, CommandType command_type, bytes data, str message=None): self.command_type = command_type self.data = data self.message = message def __str__(self): command_type_names = { 10: "LOGIN", 20: "LOAD", 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 })