diff --git a/MLAPI/Data/NetworkConfig.cs b/MLAPI/Data/NetworkConfig.cs index 5c9bf3d..5f8c9f1 100644 --- a/MLAPI/Data/NetworkConfig.cs +++ b/MLAPI/Data/NetworkConfig.cs @@ -1,4 +1,5 @@ using MLAPI.MonoBehaviours.Core; +using MLAPI.NetworkingManagerComponents.Binary; using System; using System.Collections.Generic; using System.IO; @@ -155,53 +156,51 @@ namespace MLAPI.Data if (ConfigHash != null && cache) return ConfigHash; - using (MemoryStream writeStream = new MemoryStream()) + using (BitWriter writer = new BitWriter()) { - using (BinaryWriter writer = new BinaryWriter(writeStream)) + writer.WriteUShort(ProtocolVersion); + for (int i = 0; i < Channels.Count; i++) { - writer.Write(ProtocolVersion); - for (int i = 0; i < Channels.Count; i++) - { - writer.Write(Channels[i].Name); - writer.Write((byte)Channels[i].Type); - if (EnableEncryption) - writer.Write(Channels[i].Encrypted); - } - for (int i = 0; i < MessageTypes.Count; i++) - { - writer.Write(MessageTypes[i].Name); - if (AllowPassthroughMessages) - writer.Write(MessageTypes[i].Passthrough); - } - if (EnableSceneSwitching) - { - for (int i = 0; i < RegisteredScenes.Count; i++) - { - writer.Write(RegisteredScenes[i]); - } - } - if(HandleObjectSpawning) - { - for (int i = 0; i < NetworkedPrefabs.Count; i++) - { - writer.Write(NetworkedPrefabs[i].name); - } - } - writer.Write(HandleObjectSpawning); - writer.Write(EnableEncryption); - writer.Write(AllowPassthroughMessages); - writer.Write(EnableSceneSwitching); - writer.Write(SignKeyExchange); + writer.WriteString(Channels[i].Name); + writer.WriteByte((byte)Channels[i].Type); + if (EnableEncryption) + writer.WriteBool(Channels[i].Encrypted); } + for (int i = 0; i < MessageTypes.Count; i++) + { + writer.WriteString(MessageTypes[i].Name); + if (AllowPassthroughMessages) + writer.WriteBool(MessageTypes[i].Passthrough); + } + if (EnableSceneSwitching) + { + for (int i = 0; i < RegisteredScenes.Count; i++) + { + writer.WriteString(RegisteredScenes[i]); + } + } + if (HandleObjectSpawning) + { + for (int i = 0; i < NetworkedPrefabs.Count; i++) + { + writer.WriteString(NetworkedPrefabs[i].name); + } + } + writer.WriteBool(HandleObjectSpawning); + writer.WriteBool(EnableEncryption); + writer.WriteBool(AllowPassthroughMessages); + writer.WriteBool(EnableSceneSwitching); + writer.WriteBool(SignKeyExchange); + using (SHA256Managed sha256 = new SHA256Managed()) { //Returns a 256 bit / 32 byte long checksum of the config if (cache) { - ConfigHash = sha256.ComputeHash(writeStream.ToArray()); + ConfigHash = sha256.ComputeHash(writer.Finalize()); return ConfigHash; } - return sha256.ComputeHash(writeStream.ToArray()); + return sha256.ComputeHash(writer.Finalize()); } } }