Example #1
0
        private void Invoke(IRdWireable reactive, byte[] msg, bool sync = false)
        {
            if (sync)
            {
                Execute(reactive, msg);
                return;
            }

            reactive.WireScheduler.Queue(() =>
            {
                bool shouldProcess;
                lock (myLock)
                {
                    shouldProcess = mySubscriptions.ContainsKey(reactive.RdId);
                }

                if (shouldProcess)
                {
                    Execute(reactive, msg);
                }
                else
                {
                    myLogger.Trace("Handler for entity {0} dissapeared", reactive);
                }
            });
        }
Example #2
0
        public void Advise(Lifetime lifetime, IRdWireable reactive)
        {
            Assertion.Require(!reactive.RdId.IsNil, "!id.IsNil: {0}", reactive);

            //todo commented because of WiredRdTask
//      myScheduler.AssertThread(reactive);

            // ReSharper disable once InconsistentlySynchronizedField
            mySubscriptions.BlockingAddUnique(lifetime, myLock, reactive.RdId, reactive);

            if (reactive.WireScheduler.OutOfOrderExecution)
            {
                lifetime.TryExecute(() =>
                {
                    lock (myLock) {
                        if (myBroker.TryGetValue(reactive.RdId, out var mq))
                        {
                            myBroker.Remove(reactive.RdId);
                            foreach (var msg in mq.DefaultSchedulerMessages)
                            {
                                Invoke(reactive, msg);
                            }

                            mq.DefaultSchedulerMessages.Clear(); // clear it here because it is captured by default scheduler queueing
                            Assertion.Assert(mq.CustomSchedulerMessages.Count == 0, "Custom scheduler messages for an entity with outOfOrder scheduler {0}", reactive);
                        }
                    }
                });
            }
        }
Example #3
0
        private bool ShouldProcess(IRdWireable reactive)
        {
            if (!reactive.IsBound)
            {
                return(false);
            }

            lock (myLock)
            {
                return(mySubscriptions.ContainsKey(reactive.RdId));
            }
        }
Example #4
0
        private static unsafe void Execute(IRdWireable reactive, byte[] msg)
        {
            fixed(byte *p = msg)
            {
                var reader = UnsafeReader.CreateReader(p, msg.Length);
                var rdid0  = RdId.Read(reader);

                Assertion.Assert(reactive.RdId.Equals(rdid0), "Not equals: {0}, {1}", reactive.RdId, rdid0);

                reactive.OnWireReceived(reader);
            }
        }
Example #5
0
        private unsafe void Execute(IRdWireable reactive, byte[] msg)
        {
            fixed(byte *p = msg)
            {
                var reader = UnsafeReader.CreateReader(p, msg.Length);
                var rdid0  = RdId.Read(reader);

                Assertion.Assert(reactive.RdId.Equals(rdid0), "Not equals: {0}, {1}", reactive.RdId, rdid0);

                if (BackwardsCompatibleWireFormat)
                {
                    reactive.OnWireReceived(reader);
                }
                else
                {
                    using (reactive.Proto.Contexts.ReadContextsIntoCookie(reader))
                        reactive.OnWireReceived(reader);
                }
            }
        }
Example #6
0
        private void Invoke(IRdWireable reactive, byte[] msg, bool sync = false)
        {
            if (sync)
            {
                Execute(reactive, msg);
                return;
            }

            reactive.WireScheduler.Queue(() =>
            {
                if (ShouldProcess(reactive))
                {
                    Execute(reactive, msg);
                }
                else
                {
                    myLogger.Trace("Handler for entity {0} dissapeared", reactive);
                }
            });
        }
Example #7
0
 public void Advise(Lifetime lifetime, IRdWireable entity)
 {
     RealWire.Advise(lifetime, entity);
 }
Example #8
0
 public void Advise(Lifetime lifetime, IRdWireable reactive)
 {
     MessageBroker.Advise(lifetime, reactive);
 }