public ReactiveProperty <T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (reader.TryReadNil())
            {
                return(null);
            }
            else
            {
                var length = reader.ReadArrayHeader();
                if (length != 3)
                {
                    throw new InvalidOperationException("Invalid ReactiveProperty data.");
                }

                var mode = (ReactivePropertyMode)reader.ReadInt32();

                var schedulerId = reader.ReadInt32();

                IScheduler scheduler = ReactivePropertySchedulerMapper.GetScheduler(schedulerId);

                T v = options.Resolver.GetFormatterWithVerify <T>().Deserialize(ref reader, options);

                return(new ReactiveProperty <T>(scheduler, v, mode));
            }
        }
Beispiel #2
0
        public ReactiveProperty <T> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
        {
            if (MessagePackBinary.IsNil(bytes, offset))
            {
                readSize = 1;
                return(null);
            }
            else
            {
                var startOffset = offset;

                var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
                offset += readSize;
                if (length != 3)
                {
                    throw new InvalidOperationException("Invalid ReactiveProperty data.");
                }

                var mode = (ReactivePropertyMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize);
                offset += readSize;

                var schedulerId = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
                offset += readSize;

                var scheduler = ReactivePropertySchedulerMapper.GetScheduler(schedulerId);

                var v = formatterResolver.GetFormatterWithVerify <T>().Deserialize(bytes, offset, formatterResolver, out readSize);
                offset += readSize;

                readSize = offset - startOffset;

                return(new ReactiveProperty <T>(scheduler, v, mode));
            }
        }
        public void Serialize(ref MessagePackWriter writer, ReactivePropertySlim <T> value, MessagePackSerializerOptions options)
        {
            if (value == null)
            {
                writer.WriteNil();
            }
            else
            {
                writer.WriteArrayHeader(2);

                writer.Write(ReactivePropertySchedulerMapper.ToReactivePropertySlimModeInt(value));
                options.Resolver.GetFormatterWithVerify <T>().Serialize(ref writer, value.Value, options);
            }
        }
        public void Serialize(ref MessagePackWriter writer, ReactiveProperty <T> value, IFormatterResolver formatterResolver)
        {
            if (value == null)
            {
                writer.WriteNil();
            }
            else
            {
                writer.WriteArrayHeader(3);

                writer.Write(ReactivePropertySchedulerMapper.ToReactivePropertyModeInt(value));
                writer.Write(ReactivePropertySchedulerMapper.GetSchedulerId(value.RaiseEventScheduler));
                formatterResolver.GetFormatterWithVerify <T>().Serialize(ref writer, value.Value, formatterResolver);
            }
        }
Beispiel #5
0
        public int Serialize(ref byte[] bytes, int offset, ReactivePropertySlim <T> value, IFormatterResolver formatterResolver)
        {
            if (value == null)
            {
                return(MessagePackBinary.WriteNil(ref bytes, offset));
            }
            else
            {
                var startOffset = offset;

                offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2);

                offset += MessagePackBinary.WriteInt32(ref bytes, offset, ReactivePropertySchedulerMapper.ToReactivePropertySlimModeInt(value));
                offset += formatterResolver.GetFormatterWithVerify <T>().Serialize(ref bytes, offset, value.Value, formatterResolver);

                return(offset - startOffset);
            }
        }