Ejemplo n.º 1
0
        public static void DeserializeGivenChangeMask(
            BinaryReader reader, NetworkedComponentTypeInfo networkedComponentTypeInfo,
            object oldValue, uint changeMask
            )
        {
            byte changeMaskBitIndex = 0;

            foreach (var field in networkedComponentTypeInfo.ThingsToSynchronize)
            {
                if (BitUtilities.GetBit(changeMask, changeMaskBitIndex))
                {
                    if (field.FieldInfo != null)
                    {
                        var newFieldValue = Deserialize(
                            reader, field.FieldInfo.FieldType,
                            field.IsNullableIfReferenceType, field.AreElementsNullableIfReferenceType
                            );
                        field.FieldInfo.SetValue(oldValue, newFieldValue);
                    }
                    else if (field.PropertyInfo != null)
                    {
                        var newFieldValue = Deserialize(
                            reader, field.PropertyInfo.PropertyType,
                            field.IsNullableIfReferenceType, field.AreElementsNullableIfReferenceType
                            );
                        field.PropertyInfo.SetValue(oldValue, newFieldValue);
                    }
                }
                changeMaskBitIndex++;
            }
        }
Ejemplo n.º 2
0
        public static void SerializeGivenChangeMask(
            BinaryWriter writer, NetworkedComponentTypeInfo networkedComponentTypeInfo,
            object value, uint changeMask
            )
        {
            uint changeMaskBitIndex = 0;

            foreach (var field in networkedComponentTypeInfo.ThingsToSynchronize)
            {
                if (BitUtilities.GetBit(changeMask, (byte)changeMaskBitIndex))
                {
                    object fieldValue;
                    Type   fieldType;

                    if (field.FieldInfo != null)
                    {
                        fieldValue = field.FieldInfo.GetValue(value);
                        fieldType  = field.FieldInfo.FieldType;
                    }
                    else if (field.PropertyInfo != null)
                    {
                        fieldValue = field.PropertyInfo.GetValue(value);
                        fieldType  = field.PropertyInfo.PropertyType;
                    }
                    else
                    {
                        throw new Exception("Invalid field to synchronize.");
                    }

                    SerializeObject(
                        writer, fieldValue, fieldType,
                        field.IsNullableIfReferenceType, field.AreElementsNullableIfReferenceType
                        );
                }
                changeMaskBitIndex++;
            }
        }