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); }
protected override void Init(Lifetime lifetime) { base.Init(lifetime); SerializationContext = base.SerializationContext; //caching context because of we could listen on Wire.Advise(lifetime, this); }
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); }
protected override void Init(Lifetime lifetime) { base.Init(lifetime); myBindLifetime = lifetime; Wire.Advise(lifetime, this); }
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, "$"); }); } }
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 }); } }
protected override void Init(Lifetime lifetime) { base.Init(lifetime); myBindLifetime = lifetime; //because we advise synchronous scheduler SerializationContext = base.SerializationContext; Wire.Advise(lifetime, this); }
protected override void Init(Lifetime lifetime) { base.Init(lifetime); lock (myOrderingLock) { myHandlerOrder.View(lifetime, (handlerLt, _, handler) => { BindAndSendHandler(handlerLt, handler); }); } Wire.Advise(lifetime, this); }
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 + "]"); }); } }