Esempio n. 1
0
        void ExternalTransportTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (e.Message.MessageIntent == MessageIntentEnum.Publish)
            {
                string val = null;
                foreach (var header in e.Message.Headers)
                {
                    if (header.Key == UnicastBus.EnclosedMessageTypes)
                    {
                        val = header.Value;
                    }
                }

                var types = UnicastBus.DeserializeEnclosedMessageTypes(val);

                var subs = Subscribers.GetSubscriberAddressesForMessage(types.Select(s => new MessageType(s)));

                Logger.Debug("Received notification from " + remoteServer + ".");

                foreach (var s in subs)
                {
                    InternalMessageSender.Send(e.Message, s);
                }
            }
            else
            {
                ProxyData data = null;

                if (e.Message.CorrelationId != null)
                {
                    data = Storage.GetAndRemove(e.Message.CorrelationId);
                }

                if (data == null)
                {
                    return;
                }

                e.Message.CorrelationId = data.CorrelationId;

                Logger.Debug("Received response from " + remoteServer + ".");

                InternalMessageSender.Send(e.Message, data.ClientAddress);
            }
        }