|
2 | 2 | using System;
|
3 | 3 | using System.Collections;
|
4 | 4 | using System.Collections.Generic;
|
5 |
| -using System.IO; |
6 | 5 | using UnityEngine;
|
7 | 6 | using UnityEngine.Networking;
|
8 | 7 | using System.Linq;
|
@@ -745,29 +744,17 @@ private void Update()
|
745 | 744 | diffiePublic = clientDiffieHellman.GetPublicKey();
|
746 | 745 | }
|
747 | 746 |
|
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()) |
755 | 748 | {
|
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); |
771 | 758 | }
|
772 | 759 | }
|
773 | 760 | break;
|
@@ -1061,32 +1048,25 @@ internal void OnClientDisconnect(uint clientId)
|
1061 | 1048 |
|
1062 | 1049 | if (isServer)
|
1063 | 1050 | {
|
1064 |
| - using (MemoryStream stream = new MemoryStream(4)) |
| 1051 | + using (BitWriter writer = new BitWriter()) |
1065 | 1052 | {
|
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 | + } |
1072 | 1056 | }
|
1073 | 1057 | }
|
1074 | 1058 |
|
1075 | 1059 | private void SyncTime()
|
1076 | 1060 | {
|
1077 |
| - using (MemoryStream stream = new MemoryStream(8)) |
| 1061 | + using (BitWriter writer = new BitWriter()) |
1078 | 1062 | {
|
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); |
1085 | 1066 |
|
| 1067 | + byte[] buffer = writer.Finalize(); |
1086 | 1068 | 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); |
1090 | 1070 | }
|
1091 | 1071 | }
|
1092 | 1072 |
|
@@ -1134,124 +1114,88 @@ internal void HandleApproval(uint clientId, bool approved, Vector3 position, Qua
|
1134 | 1114 | GameObject go = SpawnManager.SpawnPlayerObject(clientId, networkId, position, rotation);
|
1135 | 1115 | connectedClients[clientId].PlayerObject = go;
|
1136 | 1116 | }
|
1137 |
| - int sizeOfStream = 17 + ((connectedClients.Count - 1) * 4); |
1138 | 1117 |
|
1139 | 1118 | int amountOfObjectsToSend = SpawnManager.spawnedObjects.Values.Count();
|
1140 | 1119 |
|
1141 |
| - if (NetworkConfig.HandleObjectSpawning) |
| 1120 | + using (BitWriter writer = new BitWriter()) |
1142 | 1121 | {
|
1143 |
| - sizeOfStream += 4; |
1144 |
| - sizeOfStream += 38 * amountOfObjectsToSend; |
1145 |
| - } |
| 1122 | + writer.WriteUInt(clientId); |
| 1123 | + if (NetworkConfig.EnableSceneSwitching) |
| 1124 | + writer.WriteUInt(NetworkSceneManager.CurrentSceneIndex); |
1146 | 1125 |
|
1147 |
| - if (NetworkConfig.EnableEncryption) |
1148 |
| - { |
1149 |
| - sizeOfStream += 2 + publicKey.Length; |
1150 |
| - if (NetworkConfig.SignKeyExchange) |
| 1126 | + if (NetworkConfig.EnableEncryption) |
1151 | 1127 | {
|
1152 |
| - sizeOfStream += 2 + publicKeySignature.Length; |
| 1128 | + writer.WriteByteArray(publicKey); |
| 1129 | + if (NetworkConfig.SignKeyExchange) |
| 1130 | + writer.WriteByteArray(publicKeySignature); |
1153 | 1131 | }
|
1154 |
| - } |
1155 | 1132 |
|
1156 |
| - if (NetworkConfig.EnableSceneSwitching) |
1157 |
| - { |
1158 |
| - sizeOfStream += 4; |
1159 |
| - } |
| 1133 | + writer.WriteFloat(NetworkTime); |
| 1134 | + writer.WriteInt(NetworkTransport.GetNetworkTimestamp()); |
1160 | 1135 |
|
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) |
1164 | 1138 | {
|
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); |
1184 | 1147 |
|
1185 |
| - writer.Write(connectedClients.Count - 1); |
1186 |
| - foreach (KeyValuePair<uint, NetworkedClient> item in connectedClients) |
| 1148 | + foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects) |
1187 | 1149 | {
|
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); |
1214 | 1164 | }
|
1215 | 1165 | }
|
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); |
1217 | 1168 |
|
1218 | 1169 | if (OnClientConnectedCallback != null)
|
1219 | 1170 | OnClientConnectedCallback.Invoke(clientId);
|
1220 | 1171 | }
|
1221 | 1172 |
|
1222 | 1173 | //Inform old clients of the new player
|
1223 | 1174 |
|
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()) |
1230 | 1176 | {
|
1231 |
| - using (BinaryWriter writer = new BinaryWriter(stream)) |
| 1177 | + if (NetworkConfig.HandleObjectSpawning) |
1232 | 1178 | {
|
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); |
1253 | 1192 | }
|
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); |
1255 | 1199 | }
|
1256 | 1200 | //Flush syncvars:
|
1257 | 1201 | foreach (KeyValuePair<uint, NetworkedObject> networkedObject in SpawnManager.spawnedObjects)
|
|
0 commit comments