Example #1
0
        public void DeliverTo(string id, object message, object payload, IActorRef sender)
        {
            var name  = Uri.EscapeDataString(id);
            var child = Context.Child(name);

            if (Equals(child, ActorRefs.Nobody))
            {
                if (State.Entries.Contains(id))
                {
                    if (MessageBuffers.ContainsKey(id))
                    {
                        throw new InvalidOperationException($"Message buffers contains id [{id}].");
                    }
                    this.GetEntity(id).Tell(payload, sender);
                }
                else
                {
                    // Note; we only do this if remembering, otherwise the buffer is an overhead
                    MessageBuffers = MessageBuffers.SetItem(id, ImmutableList <Tuple <object, IActorRef> > .Empty.Add(Tuple.Create(message, sender)));
                    ProcessChange(new Shard.EntityStarted(id), this.SendMessageBuffer);
                }
            }
            else
            {
                child.Tell(payload, sender);
            }
        }
Example #2
0
        /// <summary>
        /// TBD
        /// </summary>
        /// <param name="id">TBD</param>
        /// <param name="message">TBD</param>
        /// <param name="payload">TBD</param>
        /// <param name="sender">TBD</param>
        /// <returns>TBD</returns>
        protected override void DeliverTo(string id, object message, object payload, IActorRef sender)
        {
            var name  = Uri.EscapeDataString(id);
            var child = _context.Child(name);

            if (Equals(child, ActorRefs.Nobody))
            {
                // Note; we only do this if remembering, otherwise the buffer is an overhead
                MessageBuffers = MessageBuffers.SetItem(id, ImmutableList <Tuple <object, IActorRef> > .Empty.Add(Tuple.Create(message, sender)));
                ProcessChange(new EntityStarted(id), SendMessageBuffer);
            }
            else
            {
                child.Tell(payload, sender);
            }
        }