Пример #1
0
Файл: RdSet.cs Проект: yvvan/rd
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);
            var serializationContext = SerializationContext;

            using (UsingLocalChange())
            {
                Advise(lifetime, it =>
                {
                    if (!IsLocalChange)
                    {
                        return;
                    }

                    Wire.Send(RdId, (stream) =>
                    {
                        stream.Write((int)it.Kind);
                        WriteValueDelegate(serializationContext, stream, it.Value);


                        SendTrace?.Log($"{this} :: {it.Kind} :: {it.Value.PrintToString()}");
                    });
                });
            }

            Wire.Advise(lifetime, this);
        }
Пример #2
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            SerializationContext = base.SerializationContext; //caching context because of we could listen on
            Wire.Advise(lifetime, this);
        }
Пример #3
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);
            var serializationContext = SerializationContext;

            using (UsingLocalChange())
            {
                Advise(lifetime, it =>
                {
                    if (!IsLocalChange)
                    {
                        return;
                    }

                    Wire.Send(RdId, (stream) =>
                    {
                        stream.Write((int)it.Kind);
                        WriteValueDelegate(serializationContext, stream, it.Value);

                        if (LogSend.IsTraceEnabled())
                        {
                            LogSend.Trace("Set `{0}` ({1}) :: {2} :: {3}", Location, RdId, it.Kind, it.Value.PrintToString());
                        }
                    });
                });
            }

            Wire.Advise(lifetime, this);
        }
Пример #4
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);
            myBindLifetime = lifetime;

            Wire.Advise(lifetime, this);
        }
Пример #5
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            var serializationContext = SerializationContext;

            if (!OptimizeNested)
            {
                Change.Advise(lifetime, v =>
                {
                    if (IsLocalChange)
                    {
                        v.IdentifyPolymorphic(Proto.Identities, Proto.Identities.Next(RdId));
                    }
                });
            }

            Advise(lifetime, v =>
            {
                if (!IsLocalChange)
                {
                    return;
                }
                if (IsMaster)
                {
                    myMasterVersion++;
                }

                Wire.Send(RdId, SendContext.Of(serializationContext, v, this), (sendContext, writer) =>
                {
                    var sContext = sendContext.SzrCtx;
                    var evt      = sendContext.Event;
                    var me       = sendContext.This;
                    writer.Write(me.myMasterVersion);
                    me.WriteValueDelegate(sContext, writer, evt);
                    if (LogSend.IsTraceEnabled())
                    {
                        LogSend.Trace("property `{0}` ({1}):: ver = {2}, value = {3}", me.Location, me.RdId, me.myMasterVersion,
                                      me.Value.PrintToString());
                    }
                });
            });


            Wire.Advise(lifetime, this);


            if (!OptimizeNested)
            {
                this.View(lifetime, (lf, v) =>
                {
                    v.BindPolymorphic(lf, this, "$");
                });
            }
        }
Пример #6
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            var serializationContext = SerializationContext;

            using (UsingLocalChange())
            {
                Advise(lifetime, it =>
                {
                    if (!IsLocalChange)
                    {
                        return;
                    }

                    if (!OptimizeNested && it.Kind != AddUpdateRemove.Remove)
                    {
                        it.NewValue.IdentifyPolymorphic(Proto.Identities, Proto.Identities.Next(RdId));
                    }

                    Wire.Send(RdId, SendContext.Of(serializationContext, it, this), (sendContext, stream) =>
                    {
                        var sContext = sendContext.SzrCtx;
                        var evt      = sendContext.Event;
                        var me       = sendContext.This;

                        stream.Write((me.myNextVersion++ << versionedFlagShift) | (long)evt.Kind);

                        stream.Write(evt.Index);
                        if (evt.Kind != AddUpdateRemove.Remove)
                        {
                            me.WriteValueDelegate(sContext, stream, evt.NewValue);
                        }

                        if (LogSend.IsTraceEnabled())
                        {
                            LogSend.Trace("list `{0}` ({1}) :: {2} :: index={3} :: version = {4}{5}", me.Location, me.RdId, evt.Kind, evt.Index
                                          , me.myNextVersion - 1
                                          , evt.Kind != AddUpdateRemove.Remove  ? " :: value = " + evt.NewValue.PrintToString() : "");
                        }
                    });
                });
            }

            Wire.Advise(lifetime, this);


            if (!OptimizeNested) //means values must be bindable
            {
                this.View(lifetime, (lf, index, value) =>
                {
                    value.BindPolymorphic(lf, this, "[" + index + "]"); //todo name will be not unique when you add elements in the middle of the list
                });
            }
        }
Пример #7
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            myBindLifetime = lifetime;

            //because we advise synchronous scheduler
            SerializationContext = base.SerializationContext;

            Wire.Advise(lifetime, this);
        }
Пример #8
0
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            lock (myOrderingLock)
            {
                myHandlerOrder.View(lifetime, (handlerLt, _, handler) =>
                {
                    BindAndSendHandler(handlerLt, handler);
                });
            }

            Wire.Advise(lifetime, this);
        }
Пример #9
0
Файл: RdMap.cs Проект: yvvan/rd
        protected override void Init(Lifetime lifetime)
        {
            base.Init(lifetime);

            var serializationContext = SerializationContext;

            using (UsingLocalChange())
            {
                Advise(lifetime, it =>
                {
                    if (!IsLocalChange)
                    {
                        return;
                    }

                    AssertNullability(it.Key);

                    if (it.Kind != AddUpdateRemove.Remove)
                    {
                        AssertNullability(it.NewValue);
                    }

                    if (!OptimizeNested && it.Kind != AddUpdateRemove.Remove)
                    {
                        it.NewValue.IdentifyPolymorphic(Proto.Identities, Proto.Identities.Next(RdId));
                    }

                    Wire.Send(RdId, SendContext.Of(serializationContext, it, this), (sendContext, stream) =>
                    {
                        var sContext      = sendContext.SzrCtx;
                        var evt           = sendContext.Event;
                        var me            = sendContext.This;
                        var versionedFlag = me.IsMaster ? 1 << versionedFlagShift : 0;
                        stream.Write(versionedFlag | (int)evt.Kind);

                        var version = ++me.myNextVersion;
                        if (me.IsMaster)
                        {
                            me.myPendingForAck[evt.Key] = version;
                            stream.Write(version);
                        }

                        me.WriteKeyDelegate(sContext, stream, evt.Key);
                        if (evt.Kind != AddUpdateRemove.Remove)
                        {
                            me.WriteValueDelegate(sContext, stream, evt.NewValue);
                        }


                        SendTrace?.Log($"{me} :: {evt.Kind} :: key = {evt.Key.PrintToString()}"
                                       + (me.IsMaster     ? " :: version = " + version : "")
                                       + (evt.Kind != AddUpdateRemove.Remove  ? " :: value = " + evt.NewValue.PrintToString() : ""));
                    });
                });
            }

            Wire.Advise(lifetime, this);


            if (!OptimizeNested) //means values must be bindable
            {
                this.View(lifetime, (lf, k, v) =>
                {
                    v.BindPolymorphic(lf, this, "[" + k + "]");
                });
            }
        }