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); }
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])); }
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); }
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); }
public override void Bind <T>(ref T obj) { obj = (T)SyncSerialization.ReadSyncObject(reader, typeof(T)); }
public void Bind <T>(ref T obj, SyncType type) { obj = (T)SyncSerialization.ReadSyncObject(reader, type); }