コード例 #1
0
        protected override IList <string> GetSignals(string userId, string connectionId)
        {
            var signals = _hubs.SelectMany(info =>
            {
                var items = new List <string>
                {
                    PrefixHelper.GetHubName(info.Name),
                    PrefixHelper.GetHubConnectionId(info.CreateQualifiedName(connectionId)),
                };

                if (!String.IsNullOrEmpty(userId))
                {
                    items.Add(PrefixHelper.GetHubUserId(info.CreateQualifiedName(userId)));
                }

                return(items);
            })
                          .Concat(new[]
            {
                PrefixHelper.GetConnectionId(connectionId),
                PrefixHelper.GetAck(connectionId)
            });

            return(signals.ToList());
        }
コード例 #2
0
        internal static Task Ack(this IMessageBus bus, string acker, string waiter, string commandId)
        {
            // Prepare the ack
            var message = new Message(acker, PrefixHelper.GetAck(waiter), null);

            message.CommandId = commandId;
            message.IsAck     = true;
            return(bus.Publish(message));
        }
コード例 #3
0
        private IList <string> GetDefaultSignals(string userId, string connectionId)
        {
            // The list of default signals this connection cares about:
            // 1. The default signal (the type name)
            // 2. The connection id (so we can message this particular connection)
            // 3. Ack signal

            return(new string[] {
                DefaultSignal,
                PrefixHelper.GetConnectionId(connectionId),
                PrefixHelper.GetAck(connectionId)
            });
        }
コード例 #4
0
 protected override IList <string> GetSignals(string connectionId)
 {
     return(_hubs.SelectMany(info => new[] { PrefixHelper.GetHubName(info.Name), PrefixHelper.GetHubConnectionId(info.CreateQualifiedName(connectionId)) })
            .Concat(new[] { PrefixHelper.GetConnectionId(connectionId), PrefixHelper.GetAck(connectionId) })
            .ToList());
 }
コード例 #5
0
        public void AcksAreSentToCommandSource()
        {
            // Arrange
            var waitCommand = new Command {
                WaitForAck = true
            };
            var ackerId     = "acker";
            var waiterId    = "waiter";
            var messageId   = "messageId";
            var maxMessages = 1;

            var ackHandler = new Mock <IAckHandler>();

            ackHandler.Setup(m => m.TriggerAck(waitCommand.Id)).Returns(false);

            var     messageBus  = new Mock <IMessageBus>();
            Message waitMessage = null;
            Message ackMessage  = null;

            messageBus.Setup(m => m.Publish(It.IsAny <Message>())).Returns <Message>(m =>
            {
                if (m.WaitForAck)
                {
                    waitMessage = m;
                }
                else if (m.IsAck)
                {
                    ackMessage = m;
                }

                return(TaskAsyncHelper.Empty);
            });

            var loggerFactory = new Mock <ILoggerFactory>();
            var counters      = new PerformanceCounterManager(loggerFactory.Object);

            var serializer       = JsonUtility.CreateDefaultSerializer();
            var waiterConnection = new Connection(messageBus.Object,
                                                  serializer,
                                                  "signal",
                                                  waiterId,
                                                  new string[] { },
                                                  new string[] { },
                                                  loggerFactory.Object,
                                                  ackHandler.Object,
                                                  counters,
                                                  new Mock <IProtectedData>().Object,
                                                  new MemoryPool());

            // Act
            waiterConnection.Send(ackerId, waitCommand);

            // Assert
            Assert.NotNull(waitMessage);
            Assert.Equal(waiterId, waitMessage.Source);
            Assert.Equal(PrefixHelper.GetConnectionId(ackerId), waitMessage.Key);

            // Arrange some more now that we have a waitMessage
            var messages = new List <ArraySegment <Message> >()
            {
                new ArraySegment <Message>(new[] { waitMessage })
            };
            var messageResult = new MessageResult(messages, 1);

            var ackerConnection = new Connection(messageBus.Object,
                                                 serializer,
                                                 "signal",
                                                 ackerId,
                                                 new string[] { },
                                                 new string[] { },
                                                 loggerFactory.Object,
                                                 ackHandler.Object,
                                                 counters,
                                                 new Mock <IProtectedData>().Object,
                                                 new Mock <IMemoryPool>().Object);

            ackerConnection.WriteCursor = _ => { };

            messageBus.Setup(m => m.Subscribe(ackerConnection,
                                              messageId,
                                              It.IsAny <Func <MessageResult, object, Task <bool> > >(),
                                              maxMessages,
                                              It.IsAny <object>()))
            .Callback <ISubscriber,
                       string,
                       Func <MessageResult, object, Task <bool> >,
                       int,
                       object>((subsciber, cursor, callback, max, state) =>
            {
                callback(messageResult, state);
            });

            // Act
            ackerConnection.Receive(messageId, (_, __) => TaskAsyncHelper.False, maxMessages, null);

            // Assert
            Assert.NotNull(ackMessage);
            Assert.Equal(ackerId, ackMessage.Source);
            Assert.Equal(PrefixHelper.GetAck(waiterId), ackMessage.Key);
        }