Akka.Interfaced.SlimServer.ActorBoundChannelTest.TestActorBoundChannel.Handle C# (CSharp) Method

Handle() private method

private Handle ( Request m ) : void
m Request
return void
            private void Handle(Request m)
            {
                var message = m.Message;

                var boundActor = GetBoundActor(m.ActorId);
                if (boundActor == null)
                {
                    Sender.Tell(new ResponseMessage { RequestId = message.RequestId, Exception = new RequestTargetException() });
                    return;
                }

                var boundType = boundActor.FindBoundType(message.InvokePayload.GetInterfaceType());
                if (boundType == null)
                {
                    Sender.Tell(new ResponseMessage { RequestId = message.RequestId, Exception = new RequestHandlerNotFoundException() });
                    return;
                }

                if (boundType.IsTagOverridable)
                {
                    var msg = (IPayloadTagOverridable)message.InvokePayload;
                    msg.SetTag(boundType.TagValue);
                }

                var observerUpdatable = message.InvokePayload as IPayloadObserverUpdatable;
                if (observerUpdatable != null)
                {
                    observerUpdatable.Update(o =>
                    {
                        var observer = ((InterfacedObserver)o);
                        if (observer != null)
                        {
                            // naive observer channel management. but this is good enough,
                            // because client-side of slim channel usually keep observer id unique.
                            _observerChannelMap[observer.ObserverId] = observer.Channel;

                            observer.Channel = new AkkaReceiverNotificationChannel(Self);
                        }
                    });
                }

                _requestMap[message.RequestId] = Sender;
                boundActor.Actor.Tell(message, Self);
            }