From adcffab78a70ea3948e3e87c1e27ea7f050af7ca Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Fri, 2 Dec 2022 10:36:52 +0100 Subject: [PATCH] Match C# string serialization in network stream to C++ impl --- Source/Engine/Networking/NetworkStream.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Source/Engine/Networking/NetworkStream.cs b/Source/Engine/Networking/NetworkStream.cs index f489ca5e2..0371bb7c1 100644 --- a/Source/Engine/Networking/NetworkStream.cs +++ b/Source/Engine/Networking/NetworkStream.cs @@ -236,17 +236,15 @@ namespace FlaxEngine.Networking public void WriteString(string value) { // Note: Make sure that this is consistent with the C++ message API! - if (value == null) { - WriteUInt16(0); + WriteInt32(0); return; } - var data = Encoding.Unicode.GetBytes(value); - var dataLength = data.Length; var stringLength = value.Length; - WriteUInt16((ushort)stringLength); // TODO: Use 1-byte length when possible - WriteBytes(data, dataLength); + WriteInt32(stringLength); + fixed (char* ptr = value) + WriteData(new IntPtr(ptr), value.Length * 2); } /// @@ -255,13 +253,11 @@ namespace FlaxEngine.Networking public string ReadString() { // Note: Make sure that this is consistent with the C++ message API! - - var stringLength = ReadUInt16(); // In chars + var stringLength = ReadInt32(); if (stringLength == 0) return string.Empty; - var dataLength = stringLength * sizeof(char); // In bytes + var dataLength = stringLength * sizeof(char); var bytes = stackalloc char[stringLength]; - ReadBytes((byte*)bytes, dataLength); return new string(bytes, 0, stringLength); }