Skip to content

Commit 2acb20e

Browse files
committed
Replaced ALL usage of BinaryWriter / BinaryReader with BitReader & BitWriter
1 parent 39c262e commit 2acb20e

File tree

7 files changed

+672
-840
lines changed

7 files changed

+672
-840
lines changed

MLAPI/Data/FieldType.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ internal enum FieldType
77
{
88
Bool,
99
Byte,
10-
Char,
1110
Double,
1211
Single,
1312
Int,

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 241 additions & 288 deletions
Large diffs are not rendered by default.

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 78 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System;
33
using System.Collections;
44
using System.Collections.Generic;
5-
using System.IO;
65
using UnityEngine;
76
using UnityEngine.Networking;
87
using System.Linq;
@@ -745,29 +744,17 @@ private void Update()
745744
diffiePublic = clientDiffieHellman.GetPublicKey();
746745
}
747746

748-
int sizeOfStream = 32;
749-
if (NetworkConfig.ConnectionApproval)
750-
sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
751-
if (NetworkConfig.EnableEncryption)
752-
sizeOfStream += 2 + diffiePublic.Length;
753-
754-
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
747+
using (BitWriter writer = new BitWriter())
755748
{
756-
using (BinaryWriter writer = new BinaryWriter(writeStream))
757-
{
758-
writer.Write(NetworkConfig.GetConfig());
759-
if (NetworkConfig.EnableEncryption)
760-
{
761-
writer.Write((ushort)diffiePublic.Length);
762-
writer.Write(diffiePublic);
763-
}
764-
if (NetworkConfig.ConnectionApproval)
765-
{
766-
writer.Write((ushort)NetworkConfig.ConnectionData.Length);
767-
writer.Write(NetworkConfig.ConnectionData);
768-
}
769-
}
770-
InternalMessageHandler.Send(netId.GetClientId(), "MLAPI_CONNECTION_REQUEST", "MLAPI_INTERNAL", writeStream.GetBuffer(), null, null, true);
749+
writer.WriteByteArray(NetworkConfig.GetConfig(), true);
750+
751+
if (NetworkConfig.EnableEncryption)
752+
writer.WriteByteArray(diffiePublic);
753+
754+
if (NetworkConfig.ConnectionApproval)
755+
writer.WriteByteArray(NetworkConfig.ConnectionData);
756+
757+
InternalMessageHandler.Send(netId.GetClientId(), "MLAPI_CONNECTION_REQUEST", "MLAPI_INTERNAL", writer.Finalize(), null, null, true);
771758
}
772759
}
773760
break;
@@ -1061,32 +1048,25 @@ internal void OnClientDisconnect(uint clientId)
10611048

10621049
if (isServer)
10631050
{
1064-
using (MemoryStream stream = new MemoryStream(4))
1051+
using (BitWriter writer = new BitWriter())
10651052
{
1066-
using (BinaryWriter writer = new BinaryWriter(stream))
1067-
{
1068-
writer.Write(clientId);
1069-
}
1070-
InternalMessageHandler.Send("MLAPI_CLIENT_DISCONNECT", "MLAPI_INTERNAL", stream.GetBuffer(), clientId);
1071-
}
1053+
writer.WriteUInt(clientId);
1054+
InternalMessageHandler.Send("MLAPI_CLIENT_DISCONNECT", "MLAPI_INTERNAL", writer.Finalize(), clientId);
1055+
}
10721056
}
10731057
}
10741058

10751059
private void SyncTime()
10761060
{
1077-
using (MemoryStream stream = new MemoryStream(8))
1061+
using (BitWriter writer = new BitWriter())
10781062
{
1079-
using (BinaryWriter writer = new BinaryWriter(stream))
1080-
{
1081-
writer.Write(NetworkTime);
1082-
int timestamp = NetworkTransport.GetNetworkTimestamp();
1083-
writer.Write(timestamp);
1084-
}
1063+
writer.WriteFloat(NetworkTime);
1064+
int timestamp = NetworkTransport.GetNetworkTimestamp();
1065+
writer.WriteInt(timestamp);
10851066

1067+
byte[] buffer = writer.Finalize();
10861068
foreach (KeyValuePair<uint, NetworkedClient> pair in connectedClients)
1087-
{
1088-
InternalMessageHandler.Send("MLAPI_TIME_SYNC", "MLAPI_TIME_SYNC", stream.GetBuffer());
1089-
}
1069+
InternalMessageHandler.Send("MLAPI_TIME_SYNC", "MLAPI_TIME_SYNC", buffer);
10901070
}
10911071
}
10921072

@@ -1134,124 +1114,88 @@ internal void HandleApproval(uint clientId, bool approved, Vector3 position, Qua
11341114
GameObject go = SpawnManager.SpawnPlayerObject(clientId, networkId, position, rotation);
11351115
connectedClients[clientId].PlayerObject = go;
11361116
}
1137-
int sizeOfStream = 17 + ((connectedClients.Count - 1) * 4);
11381117

11391118
int amountOfObjectsToSend = SpawnManager.spawnedObjects.Values.Count();
11401119

1141-
if (NetworkConfig.HandleObjectSpawning)
1120+
using (BitWriter writer = new BitWriter())
11421121
{
1143-
sizeOfStream += 4;
1144-
sizeOfStream += 38 * amountOfObjectsToSend;
1145-
}
1122+
writer.WriteUInt(clientId);
1123+
if (NetworkConfig.EnableSceneSwitching)
1124+
writer.WriteUInt(NetworkSceneManager.CurrentSceneIndex);
11461125

1147-
if (NetworkConfig.EnableEncryption)
1148-
{
1149-
sizeOfStream += 2 + publicKey.Length;
1150-
if (NetworkConfig.SignKeyExchange)
1126+
if (NetworkConfig.EnableEncryption)
11511127
{
1152-
sizeOfStream += 2 + publicKeySignature.Length;
1128+
writer.WriteByteArray(publicKey);
1129+
if (NetworkConfig.SignKeyExchange)
1130+
writer.WriteByteArray(publicKeySignature);
11531131
}
1154-
}
11551132

1156-
if (NetworkConfig.EnableSceneSwitching)
1157-
{
1158-
sizeOfStream += 4;
1159-
}
1133+
writer.WriteFloat(NetworkTime);
1134+
writer.WriteInt(NetworkTransport.GetNetworkTimestamp());
11601135

1161-
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
1162-
{
1163-
using (BinaryWriter writer = new BinaryWriter(writeStream))
1136+
writer.WriteInt(connectedClients.Count - 1);
1137+
foreach (KeyValuePair<uint, NetworkedClient> item in connectedClients)
11641138
{
1165-
writer.Write(clientId);
1166-
if(NetworkConfig.EnableSceneSwitching)
1167-
{
1168-
writer.Write(NetworkSceneManager.CurrentSceneIndex);
1169-
}
1170-
1171-
if (NetworkConfig.EnableEncryption)
1172-
{
1173-
writer.Write((ushort)publicKey.Length);
1174-
writer.Write(publicKey);
1175-
if (NetworkConfig.SignKeyExchange)
1176-
{
1177-
writer.Write((ushort)publicKeySignature.Length);
1178-
writer.Write(publicKeySignature);
1179-
}
1180-
}
1181-
1182-
writer.Write(NetworkTime);
1183-
writer.Write(NetworkTransport.GetNetworkTimestamp());
1139+
//Our own ID. Already added as the first one above
1140+
if (item.Key == clientId)
1141+
continue;
1142+
writer.WriteUInt(item.Key); //ClientId
1143+
}
1144+
if (NetworkConfig.HandleObjectSpawning)
1145+
{
1146+
writer.WriteInt(amountOfObjectsToSend);
11841147

1185-
writer.Write(connectedClients.Count - 1);
1186-
foreach (KeyValuePair<uint, NetworkedClient> item in connectedClients)
1148+
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
11871149
{
1188-
//Our own ID. Already added as the first one above
1189-
if (item.Key == clientId)
1190-
continue;
1191-
writer.Write(item.Key); //ClientId
1192-
}
1193-
if (NetworkConfig.HandleObjectSpawning)
1194-
{
1195-
writer.Write(amountOfObjectsToSend);
1196-
1197-
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
1198-
{
1199-
writer.Write(pair.Value.isPlayerObject);
1200-
writer.Write(pair.Value.NetworkId);
1201-
writer.Write(pair.Value.OwnerClientId);
1202-
writer.Write(NetworkConfig.NetworkPrefabIds[pair.Value.NetworkedPrefabName]);
1203-
writer.Write(pair.Value.gameObject.activeInHierarchy);
1204-
writer.Write(pair.Value.sceneObject == null ? true : pair.Value.sceneObject.Value);
1205-
1206-
writer.Write(pair.Value.transform.position.x);
1207-
writer.Write(pair.Value.transform.position.y);
1208-
writer.Write(pair.Value.transform.position.z);
1209-
1210-
writer.Write(pair.Value.transform.rotation.eulerAngles.x);
1211-
writer.Write(pair.Value.transform.rotation.eulerAngles.y);
1212-
writer.Write(pair.Value.transform.rotation.eulerAngles.z);
1213-
}
1150+
writer.WriteBool(pair.Value.isPlayerObject);
1151+
writer.WriteUInt(pair.Value.NetworkId);
1152+
writer.WriteUInt(pair.Value.OwnerClientId);
1153+
writer.WriteInt(NetworkConfig.NetworkPrefabIds[pair.Value.NetworkedPrefabName]);
1154+
writer.WriteBool(pair.Value.gameObject.activeInHierarchy);
1155+
writer.WriteBool(pair.Value.sceneObject == null ? true : pair.Value.sceneObject.Value);
1156+
1157+
writer.WriteFloat(pair.Value.transform.position.x);
1158+
writer.WriteFloat(pair.Value.transform.position.y);
1159+
writer.WriteFloat(pair.Value.transform.position.z);
1160+
1161+
writer.WriteFloat(pair.Value.transform.rotation.eulerAngles.x);
1162+
writer.WriteFloat(pair.Value.transform.rotation.eulerAngles.y);
1163+
writer.WriteFloat(pair.Value.transform.rotation.eulerAngles.z);
12141164
}
12151165
}
1216-
InternalMessageHandler.Send(clientId, "MLAPI_CONNECTION_APPROVED", "MLAPI_INTERNAL", writeStream.GetBuffer(), null, null, true);
1166+
1167+
InternalMessageHandler.Send(clientId, "MLAPI_CONNECTION_APPROVED", "MLAPI_INTERNAL", writer.Finalize(), null, null, true);
12171168

12181169
if (OnClientConnectedCallback != null)
12191170
OnClientConnectedCallback.Invoke(clientId);
12201171
}
12211172

12221173
//Inform old clients of the new player
12231174

1224-
if(NetworkConfig.HandleObjectSpawning)
1225-
sizeOfStream = 38;
1226-
else
1227-
sizeOfStream = 4;
1228-
1229-
using (MemoryStream stream = new MemoryStream(sizeOfStream))
1175+
using (BitWriter writer = new BitWriter())
12301176
{
1231-
using (BinaryWriter writer = new BinaryWriter(stream))
1177+
if (NetworkConfig.HandleObjectSpawning)
12321178
{
1233-
if (NetworkConfig.HandleObjectSpawning)
1234-
{
1235-
writer.Write(true);
1236-
writer.Write(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().NetworkId);
1237-
writer.Write(clientId);
1238-
writer.Write(-1);
1239-
writer.Write(false);
1240-
1241-
writer.Write(connectedClients[clientId].PlayerObject.transform.position.x);
1242-
writer.Write(connectedClients[clientId].PlayerObject.transform.position.y);
1243-
writer.Write(connectedClients[clientId].PlayerObject.transform.position.z);
1244-
1245-
writer.Write(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.x);
1246-
writer.Write(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.y);
1247-
writer.Write(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.z);
1248-
}
1249-
else
1250-
{
1251-
writer.Write(clientId);
1252-
}
1179+
writer.WriteBool(true);
1180+
writer.WriteUInt(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().NetworkId);
1181+
writer.WriteUInt(clientId);
1182+
writer.WriteInt(-1);
1183+
writer.WriteBool(false);
1184+
1185+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.x);
1186+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.y);
1187+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.z);
1188+
1189+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.x);
1190+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.y);
1191+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.z);
12531192
}
1254-
InternalMessageHandler.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer(), clientId);
1193+
else
1194+
{
1195+
writer.WriteUInt(clientId);
1196+
}
1197+
1198+
InternalMessageHandler.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer.Finalize(), clientId);
12551199
}
12561200
//Flush syncvars:
12571201
foreach (KeyValuePair<uint, NetworkedObject> networkedObject in SpawnManager.spawnedObjects)

0 commit comments

Comments
 (0)