// 以utf-8编码作为约定的交互标准 def Hello(self, endpoint: bytes): """ 用户上报自己的地址信息 Args: endpoint (bytes): 地址信息. 格式为: {"client_type": "$client_type", "ip":"$ip", "port":$port} Returns: None """ print('Hello:') endpoint_obj = json.loads(endpoint) with self._lock_endpoints: if endpoint_obj not in self._endpoints: print(endpoint) self._endpoints.append(endpoint_obj) def GetMessage(self, msg_id: bytes) -> bytes: """ 根据消息ID获取消息内容。 Args: msg_id (bytes): 消息ID,类型为bytes。 Returns: bytes: 消息内容,类型为bytes。如果找不到对应的消息,则返回空bytes。 """ print('GetMessage:') msg_idS = msg_id.decode() if msg_idS in self._meta_msgpairs: return bytes(self._meta_msgpairs[msg_idS], 'utf-8') return bytes() def GetAllMessages(self) -> bytes: """ 获取所有消息并返回字节类型。 Args: 无 Returns: bytes: 包含所有消息的字节类型数据。 """ print('GetAllMessages:') return json.dumps(self._meta_msgpairs).encode('utf-8') bool UApplyLutGameInstanceSubsystem::GetAllMessages( TMap<FString, FString>& Messages ) { if (p_client) { auto result = p_client->call("GetAllMessages").as<std::string>(); FString MappingJsonStr(result.size(), (const UTF8CHAR*)result.data()); // UTF8 bytes转FString // Parsing Json-formatted string TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(MappingJsonStr); TSharedPtr<FJsonObject> RootJsonObj = MakeShareable(new FJsonObject); if (FJsonSerializer::Deserialize(JsonReader, RootJsonObj)) { for(auto iter : RootJsonObj->Values) { Messages.Add(iter.Key, iter.Value->AsString()); } } else { UKismetSystemLibrary::PrintString(GetWorld(), TEXT("GetAllMessages::FJsonSerializer::Deserialize Failed!")); return false; } return !MappingJsonStr.IsEmpty(); } return false; } bool UApplyLutGameInstanceSubsystem::GetMessage( const FString& MsgId, FString& MsgValue ) { if (p_client) { auto result = p_client->call("GetMessage", FSTRING_TO_STD(MsgId)).as<std::string>(); MsgValue = FString(result.size(), (const UTF8CHAR*)result.data()); return !MsgValue.IsEmpty(); } return false; } |