Пример #1
0
        void SendCacheUpdateToClient(Uri uri, Guid clientId)
        {
            IEndpoint endpoint = _bus.GetEndpoint(uri);

            IEnumerable <SubscriptionClientSaga> sagas = _subscriptionClientSagas
                                                         .Where(x => x.CurrentState == SubscriptionClientSaga.Active && x.ControlUri != uri)
                                                         .ToList();

            sagas.Each(client =>
            {
                _log.DebugFormat("Sending AddClient {0} to {1}", client.CorrelationId, uri);

                var message = new AddSubscriptionClient(client.CorrelationId, client.ControlUri, client.DataUri);

                endpoint.Send(message, x => x.SetSourceAddress(_bus.Endpoint.Address.Uri));
            });

            List <Guid> clients = sagas.Select(x => x.CorrelationId).ToList();

            SubscriptionInformation[] subscriptions = _subscriptionSagas
                                                      .Where(x => x.CurrentState == SubscriptionSaga.Active && clients.Contains(x.SubscriptionInfo.ClientId))
                                                      .Select(x => x.SubscriptionInfo).ToArray();

            _log.InfoFormat("Sending {0} subscriptions to {1}", subscriptions.Length, uri);

            var response = new SubscriptionRefresh(subscriptions);

            endpoint.Send(response, x => x.SetSourceAddress(_bus.Endpoint.Address.Uri));
        }
        public void Should_serialize_an_empty_message()
        {
            byte[] serializedMessageData;

            var serializer = new TSerializer();

            var message = new SubscriptionRefresh(Enumerable.Empty <SubscriptionInformation>());

            using (var output = new MemoryStream())
            {
                serializer.Serialize(output, new SendContext <SubscriptionRefresh>(message));

                serializedMessageData = output.ToArray();

                Trace.WriteLine(Encoding.UTF8.GetString(serializedMessageData));
            }

            using (var input = new MemoryStream(serializedMessageData))
            {
                var receiveContext = ReceiveContext.FromBodyStream(input);
                serializer.Deserialize(receiveContext);

                IConsumeContext <SubscriptionRefresh> context;
                receiveContext.TryGetContext(out context).ShouldBeTrue();

                context.ShouldNotBeNull();

                context.Message.Subscriptions.Count.ShouldEqual(message.Subscriptions.Count);
            }
        }
        public void Should_serialize_a_message_with_one_list_item()
        {
            byte[] serializedMessageData;

            var serializer = new TSerializer();

            var message = new SubscriptionRefresh(new[] { new SubscriptionInformation(Guid.NewGuid(), 1, typeof(object), new Uri("http://localhost/")) });

            using (var output = new MemoryStream())
            {
                serializer.Serialize(output, new SendContext <SubscriptionRefresh>(message));

                serializedMessageData = output.ToArray();

                Console.WriteLine(Encoding.UTF8.GetString(serializedMessageData));
            }

            using (var input = new MemoryStream(serializedMessageData))
            {
                var receiveContext = ReceiveContext.FromBodyStream(input);
                serializer.Deserialize(receiveContext);

                IConsumeContext <SubscriptionRefresh> context;
                receiveContext.TryGetContext(out context).ShouldBeTrue();

                context.ShouldNotBeNull();

                context.Message.Subscriptions.Count.ShouldEqual(message.Subscriptions.Count);
            }
        }
Пример #4
0
        private void SendCacheUpdateToClient(Uri uri)
        {
            var subscriptions = _subscriptionSagas.Where(x => x.CurrentState == SubscriptionSaga.Active)
                                .Select(x => x.SubscriptionInfo);

            var response = new SubscriptionRefresh(subscriptions);

            IEndpoint endpoint = _endpointFactory.GetEndpoint(uri);

            endpoint.Send(response, x => x.SetSourceAddress(_bus.Endpoint.Uri));
        }