Esempio n. 1
0
        // Re-enable micro-benchmark when https://github.com/aspnet/SignalR/issues/3088 is fixed
        // [GlobalSetup]
        public void GlobalSetup()
        {
            var server    = new TestRedisServer();
            var logger    = NullLogger <RedisHubLifetimeManager <TestHub> > .Instance;
            var protocols = GenerateProtocols(ProtocolCount).ToArray();
            var options   = Options.Create(new RedisOptions()
            {
                ConnectionFactory = _ => Task.FromResult <IConnectionMultiplexer>(new TestConnectionMultiplexer(server))
            });
            var resolver = new DefaultHubProtocolResolver(protocols, NullLogger <DefaultHubProtocolResolver> .Instance);

            _manager1 = new RedisHubLifetimeManager <TestHub>(logger, options, resolver);
            _manager2 = new RedisHubLifetimeManager <TestHub>(logger, options, resolver);

            async Task ConnectClient(TestClient client, IHubProtocol protocol, string userId, string groupName)
            {
                await _manager2.OnConnectedAsync(HubConnectionContextUtils.Create(client.Connection, protocol, userId));

                await _manager2.AddToGroupAsync(client.Connection.ConnectionId, "Everyone");

                await _manager2.AddToGroupAsync(client.Connection.ConnectionId, groupName);
            }

            // Connect clients
            _clients = new TestClient[ClientCount];
            var tasks = new Task[ClientCount];

            for (var i = 0; i < _clients.Length; i++)
            {
                var protocol = protocols[i % ProtocolCount];
                _clients[i] = new TestClient(protocol: protocol);

                string group;
                string user;
                if ((i % 2) == 0)
                {
                    group = "Evens";
                    user  = "******";
                    _excludedConnectionIds.Add(_clients[i].Connection.ConnectionId);
                }
                else
                {
                    group = "Odds";
                    user  = "******";
                    _sendIds.Add(_clients[i].Connection.ConnectionId);
                }

                tasks[i] = ConnectClient(_clients[i], protocol, user, group);
                _        = ConsumeAsync(_clients[i]);
            }

            Task.WaitAll(tasks);

            _groups.Add("Evens");
            _groups.Add("Odds");
            _users.Add("EvenUser");
            _users.Add("OddUser");

            _args = new object[] { "Foo" };
        }