Exemple #1
0
        protected override void OnActorDataReceived(object sender, ActorDataReceivedEventArgs e)
        {
            var envelope = this.Decoder.DecodeEnvelope(e.Data, e.DataOffset, e.DataLength);

            bool handled = false;

            if (!handled)
            {
                foreach (var handler in GetMessageHandlers())
                {
                    if (handler.CanHandleMessage(envelope))
                    {
                        handler.HandleMessage(e.RemoteActor, envelope);
                        handled = true;
                        break;
                    }
                }
            }

            if (!handled)
            {
                _log.WarnFormat("OnActorDataReceived, cannot handle message [{0}] from remote actor [{1}].",
                                envelope.MessageType, e.RemoteActor);
            }

            base.OnActorDataReceived(sender, e);
        }
Exemple #2
0
        protected override void OnActorDataReceived(object sender, ActorDataReceivedEventArgs e)
        {
            var envelope = this.Decoder.Decode <MessageEnvelope>(e.Data, e.DataOffset, e.DataLength);

            if (envelope.Source == null)
            {
                envelope.Source = Endpoint.CreateEndpoint();
            }
            envelope.Source.AttachPath(e.RemoteActor.GetKey());

            if (envelope.Target != null)
            {
                envelope.Target.DetachPath();
            }

            bool handled = false;

            if (!handled)
            {
                if (envelope.Target != null)
                {
                    var target = envelope.Target.PeakPath();
                    if (!string.IsNullOrEmpty(target))
                    {
                        string remoteActorType, remoteActorName;
                        ActorDescription.Decode(target, out remoteActorType, out remoteActorName);
                        this.SendAsync(remoteActorType, remoteActorName, envelope.ToBytes(this.Encoder));
                        handled = true;
                    }
                }
            }

            if (!handled)
            {
                foreach (var handler in GetMessageHandlers())
                {
                    if (handler.CanHandleMessage(envelope))
                    {
                        handler.HandleMessage(e.RemoteActor, envelope);
                        handled = true;
                        break;
                    }
                }
            }

            if (!handled)
            {
                _log.WarnFormat("OnActorDataReceived, cannot handle message [{0}] from remote actor [{1}].",
                                envelope.MessageType, e.RemoteActor);
            }

            base.OnActorDataReceived(sender, e);
        }