finish representer protocol
This commit is contained in:
@@ -49,7 +49,6 @@ class ServerStatus(Enum):
|
||||
CODE_PACKER: struct.Struct = struct.Struct("=B")
|
||||
U8_PACKER: struct.Struct = struct.Struct("=B")
|
||||
U32_PACKER: struct.Struct = struct.Struct("=I")
|
||||
USIZE_PACKER: struct.Struct = struct.Struct("=N")
|
||||
|
||||
|
||||
class CmdServer:
|
||||
@@ -84,9 +83,9 @@ class CmdServer:
|
||||
self.__pipe_operator.write_pod(U32_PACKER, payload.width)
|
||||
self.__pipe_operator.write_pod(U32_PACKER, payload.height)
|
||||
self.__pipe_operator.write_bsstring(payload.engine_name)
|
||||
self.__pipe_operator.write_pod(USIZE_PACKER, payload.engine_device)
|
||||
self.__pipe_operator.write_pod(U32_PACKER, payload.engine_device)
|
||||
self.__pipe_operator.write_bsstring(payload.deliver_name)
|
||||
self.__pipe_operator.write_pod(USIZE_PACKER, payload.deliver_device)
|
||||
self.__pipe_operator.write_pod(U32_PACKER, payload.deliver_device)
|
||||
self.__pipe_operator.write_bsstring(payload.object_loader_name)
|
||||
self.__pipe_operator.write_bsstring(payload.object_loader_file)
|
||||
self.__pipe_operator.write_bsstring(payload.anime_loader_name)
|
||||
|
||||
@@ -160,7 +160,7 @@ class PipeOperator:
|
||||
def write_pod(self, pattern: struct.Struct, *args) -> None:
|
||||
self.write(pattern.pack(*args))
|
||||
|
||||
STR_LEN_PACKER: ClassVar[struct.Struct] = struct.Struct("=N")
|
||||
STR_LEN_PACKER: ClassVar[struct.Struct] = struct.Struct("=I")
|
||||
|
||||
def read_string(self) -> str:
|
||||
(length,) = self.read_pod(PipeOperator.STR_LEN_PACKER)
|
||||
@@ -174,22 +174,28 @@ class PipeOperator:
|
||||
|
||||
def read_bsstring(self) -> str:
|
||||
(length,) = self.read_pod(PipeOperator.STR_LEN_PACKER)
|
||||
str_bytes = self.read(length)
|
||||
str_bytes = self.read(length * 2)
|
||||
return self.__decode_bsstring(str_bytes)
|
||||
|
||||
def write_bsstring(self, s: str) -> None:
|
||||
str_bytes = self.__encode_bsstring(s)
|
||||
self.write_pod(PipeOperator.STR_LEN_PACKER, len(str_bytes))
|
||||
self.write_pod(PipeOperator.STR_LEN_PACKER, len(str_bytes) // 2)
|
||||
self.write(str_bytes)
|
||||
|
||||
def __encode_bsstring(self, s: str) -> bytes:
|
||||
if IS_LITTLE_ENDIAN:
|
||||
return s.encode("utf_16_le")
|
||||
if IS_WINDOWS:
|
||||
if IS_LITTLE_ENDIAN:
|
||||
return s.encode("utf_16_le")
|
||||
else:
|
||||
return s.encode("utf_16_be")
|
||||
else:
|
||||
return s.encode("utf_16_be")
|
||||
return s.encode("utf-8")
|
||||
|
||||
def __decode_bsstring(self, b: bytes) -> str:
|
||||
if IS_LITTLE_ENDIAN:
|
||||
return b.decode("utf_16_le")
|
||||
if IS_WINDOWS:
|
||||
if IS_LITTLE_ENDIAN:
|
||||
return b.decode("utf_16_le")
|
||||
else:
|
||||
return b.decode("utf_16_be")
|
||||
else:
|
||||
return b.decode("utf_16_be")
|
||||
return b.decode("utf-8")
|
||||
|
||||
Reference in New Issue
Block a user