public void OnDeserializeSafelyShouldDetectAndHandleDeSerializationMismatch() { // add components SerializeTest1NetworkBehaviour comp1 = gameObject.AddComponent <SerializeTest1NetworkBehaviour>(); SerializeMismatchNetworkBehaviour compMiss = gameObject.AddComponent <SerializeMismatchNetworkBehaviour>(); SerializeTest2NetworkBehaviour comp2 = gameObject.AddComponent <SerializeTest2NetworkBehaviour>(); // set some unique values to serialize comp1.value = 12345; comp2.value = "67890"; // serialize var ownerWriter = new NetworkWriter(); var observersWriter = new NetworkWriter(); (int ownerWritten, int observersWritten) = identity.OnSerializeAllSafely(true, ownerWriter, observersWriter); // reset component values comp1.value = 0; comp2.value = null; // deserialize all var reader = new NetworkReader(ownerWriter.ToArray()); Assert.Throws <InvalidMessageException>(() => { identity.OnDeserializeAllSafely(reader, true); }); }
public void OnDeserializeSafelyShouldDetectAndHandleDeSerializationMismatch() { // create a networkidentity with our test components GameObject gameObject = new GameObject(); NetworkIdentity identity = gameObject.AddComponent <NetworkIdentity>(); SerializeTest1NetworkBehaviour comp1 = gameObject.AddComponent <SerializeTest1NetworkBehaviour>(); SerializeMismatchNetworkBehaviour compMiss = gameObject.AddComponent <SerializeMismatchNetworkBehaviour>(); SerializeTest2NetworkBehaviour comp2 = gameObject.AddComponent <SerializeTest2NetworkBehaviour>(); // set some unique values to serialize comp1.value = 12345; comp2.value = "67890"; // serialize NetworkWriter ownerWriter = new NetworkWriter(); NetworkWriter observersWriter = new NetworkWriter(); identity.OnSerializeAllSafely(true, ownerWriter, out int ownerWritten, observersWriter, out int observersWritten); // reset component values comp1.value = 0; comp2.value = null; // deserialize all NetworkReader reader = new NetworkReader(ownerWriter.ToArray()); LogAssert.ignoreFailingMessages = true; // warning log because of serialization mismatch identity.OnDeserializeAllSafely(reader, true); LogAssert.ignoreFailingMessages = false; // the mismatch component will fail, but the one before and after // should still work fine. that's the whole point. Assert.That(comp1.value, Is.EqualTo(12345)); Assert.That(comp2.value, Is.EqualTo("67890")); // clean up GameObject.DestroyImmediate(gameObject); }