|
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