Exemplo n.º 1
0
        public override void Handle(ByteReader data)
        {
            object target = null;

            if (targetType != null)
            {
                target = SyncSerialization.ReadSyncObject(data, targetType);
                if (target == null)
                {
                    return;
                }
            }

            object value = SyncSerialization.ReadSyncObject(data, fieldType);

            if (cancelIfValueNull && value == null)
            {
                return;
            }

            object index = null;

            if (indexType != null)
            {
                index = SyncSerialization.ReadSyncObject(data, indexType);
            }

            preApply?.Invoke(target, value);

            MpLog.Debug($"Set {memberPath} in {target} to {value}, map {data.MpContext().map}, index {index}");
            MpReflection.SetValue(target, memberPath, value, index);

            postApply?.Invoke(target, value);
        }
Exemplo n.º 2
0
        internal static T ReadWithImpl <T>(ByteReader data, IList <Type> impls) where T : class
        {
            ushort impl = data.ReadUShort();

            if (impl == ushort.MaxValue)
            {
                return(null);
            }
            return((T)SyncSerialization.ReadSyncObject(data, impls[impl]));
        }
Exemplo n.º 3
0
        public override void Bind(object obj, string name)
        {
            object value = MpReflection.GetValue(obj, name);

            Type type = value.GetType();

            var res = SyncSerialization.ReadSyncObject(reader, type);

            MpReflection.SetValue(obj, name, res);
        }
Exemplo n.º 4
0
        protected override object ReadTarget(ByteReader data)
        {
            object target = Activator.CreateInstance(targetType);

            for (int i = 0; i < fieldPaths.Length; i++)
            {
                string path       = fieldPaths[i];
                string noTypePath = fieldPathsNoTypes[i];
                Type   fieldType  = fieldTypes[i];
                object value;

                if (fieldTransformers[i] is SyncTransformer tr)
                {
                    value = tr.Reader.DynamicInvoke(SyncSerialization.ReadSyncObject(data, tr.NetworkType));
                }
                else if (fieldType.IsCompilerGenerated())
                {
                    value = Activator.CreateInstance(fieldType);
                }
                else
                {
                    value = SyncSerialization.ReadSyncObject(data, fieldType);
                }

                if (value == null)
                {
                    if (allowedNull != null && !allowedNull.Contains(noTypePath))
                    {
                        return(null);
                    }
                    if (noTypePath.EndsWith(DELEGATE_THIS))
                    {
                        return(null);
                    }
                    if (cancelIfNull != null && cancelIfNull.Contains(noTypePath))
                    {
                        return(null);
                    }
                }

                if (removeNullsFromLists != null && removeNullsFromLists.Contains(noTypePath) && value is IList list)
                {
                    list.RemoveNulls();
                }

                MpReflection.SetValue(target, path, value);
            }

            return(target);
        }
Exemplo n.º 5
0
 public override void Bind <T>(ref T obj)
 {
     obj = (T)SyncSerialization.ReadSyncObject(reader, typeof(T));
 }
Exemplo n.º 6
0
 public void Bind <T>(ref T obj, SyncType type)
 {
     obj = (T)SyncSerialization.ReadSyncObject(reader, type);
 }