private TestServiceConnection MockServiceConnection(IConnectionFactory serviceConnectionFactory      = null,
                                                            IClientConnectionFactory clientConnectionFactory = null,
                                                            ILoggerFactory loggerFactory = null,
                                                            GracefulShutdownMode mode    = GracefulShutdownMode.Off)
        {
            clientConnectionFactory ??= new ClientConnectionFactory();
            serviceConnectionFactory ??= new TestConnectionFactory(conn => Task.CompletedTask);
            loggerFactory ??= NullLoggerFactory.Instance;

            var services          = new ServiceCollection();
            var connectionHandler = new EndlessConnectionHandler();

            services.AddSingleton(connectionHandler);
            var builder = new ConnectionBuilder(services.BuildServiceProvider());

            builder.UseConnectionHandler <EndlessConnectionHandler>();
            ConnectionDelegate handler = builder.Build();

            return(new TestServiceConnection(
                       serviceConnectionFactory,
                       clientConnectionFactory,
                       loggerFactory,
                       handler,
                       mode: mode
                       ));
        }
示例#2
0
        public override Task OfflineAsync(GracefulShutdownMode mode)
        {
            var task1 = base.OfflineAsync(mode);
            var task2 = Task.WhenAll(_onDemandServiceConnections.Select(c => RemoveConnectionAsync(c, mode)));

            return(Task.WhenAll(task1, task2));
        }
示例#3
0
 public TestServiceConnection(TestConnectionContainer container,
                              IServiceProtocol serviceProtocol,
                              TestClientConnectionManager clientConnectionManager,
                              IConnectionFactory connectionFactory,
                              ILoggerFactory loggerFactory,
                              ConnectionDelegate connectionDelegate,
                              IClientConnectionFactory clientConnectionFactory,
                              string serverId,
                              string connectionId,
                              HubServiceEndpoint endpoint,
                              IServiceMessageHandler serviceMessageHandler,
                              IServiceEventHandler serviceEventHandler,
                              ServiceConnectionType connectionType = ServiceConnectionType.Default,
                              GracefulShutdownMode mode            = GracefulShutdownMode.Off,
                              int closeTimeOutMilliseconds         = 10000) : base(
         serviceProtocol,
         clientConnectionManager,
         connectionFactory,
         loggerFactory,
         connectionDelegate,
         clientConnectionFactory,
         serverId,
         connectionId,
         endpoint,
         serviceMessageHandler,
         serviceEventHandler,
         connectionType: connectionType,
         mode: mode,
         closeTimeOutMilliseconds: closeTimeOutMilliseconds)
 {
     _container = container;
     ClientConnectionManager = clientConnectionManager;
 }
 public static ServicePingMessage GetFinPingMessage(GracefulShutdownMode mode = GracefulShutdownMode.Off)
 {
     return(mode switch
     {
         GracefulShutdownMode.WaitForClientsClose => ShutdownFinKeepAlive,
         GracefulShutdownMode.MigrateClients => ShutdownFinMigratable,
         _ => ShutdownFin,
     });
        private async Task OfflineAndWaitForCompletedAsync(GracefulShutdownMode mode)
        {
            _logger.LogInformation("[GracefulShutdown] Unloading server connections.");
            await _serviceConnectionManager.OfflineAsync(mode);

            _logger.LogInformation("[GracefulShutdown] Waiting client connections to complete.");
            await _clientConnectionManager.WhenAllCompleted();
        }
 public TestServiceConnection(IConnectionFactory serviceConnectionFactory,
                              IClientConnectionFactory clientConnectionFactory,
                              ILoggerFactory loggerFactory,
                              ConnectionDelegate handler,
                              GracefulShutdownMode mode = GracefulShutdownMode.Off) : base(
         new ServiceProtocol(),
         new TestClientConnectionManager(),
         serviceConnectionFactory,
         loggerFactory,
         handler,
         clientConnectionFactory,
         "serverId",
         Guid.NewGuid().ToString("N"),
         null,
         null,
         mode: mode
         )
 {
 }
 public ServiceConnection(IServiceProtocol serviceProtocol,
                          IClientConnectionManager clientConnectionManager,
                          IConnectionFactory connectionFactory,
                          ILoggerFactory loggerFactory,
                          ConnectionDelegate connectionDelegate,
                          IClientConnectionFactory clientConnectionFactory,
                          string serverId,
                          string connectionId,
                          HubServiceEndpoint endpoint,
                          IServiceMessageHandler serviceMessageHandler,
                          ServiceConnectionType connectionType = ServiceConnectionType.Default,
                          GracefulShutdownMode mode            = GracefulShutdownMode.Off,
                          int closeTimeOutMilliseconds         = DefaultCloseTimeoutMilliseconds
                          ) : base(serviceProtocol, serverId, connectionId, endpoint, serviceMessageHandler, connectionType, loggerFactory?.CreateLogger <ServiceConnection>(), mode)
 {
     _clientConnectionManager  = clientConnectionManager;
     _connectionFactory        = connectionFactory;
     _connectionDelegate       = connectionDelegate;
     _clientConnectionFactory  = clientConnectionFactory;
     _closeTimeOutMilliseconds = closeTimeOutMilliseconds;
 }
        internal async Task TestOffline(GracefulShutdownMode mode)
        {
            List <IServiceConnection> connections = new List <IServiceConnection>
            {
                new SimpleTestServiceConnection(),
                new SimpleTestServiceConnection()
            };

            using TestServiceConnectionContainer container = new TestServiceConnectionContainer(connections, factory: new SimpleTestServiceConnectionFactory());

            foreach (SimpleTestServiceConnection c in connections)
            {
                Assert.False(c.ConnectionOfflineTask.IsCompleted);
            }

            await container.OfflineAsync(mode);

            foreach (SimpleTestServiceConnection c in connections)
            {
                Assert.True(c.ConnectionOfflineTask.IsCompleted);
            }
        }
            public async Task OfflineAsync(GracefulShutdownMode mode)
            {
                await Task.Yield();

                OfflineTime = DateTime.Now;
            }
示例#10
0
            public async Task OfflineAsync(GracefulShutdownMode mode)
            {
                await Task.Yield();

                OfflineIndex = Interlocked.Increment(ref _index.Value);
            }
 public async Task OfflineAsync(GracefulShutdownMode mode)
 {
     await _serviceConnection.OfflineAsync(mode);
 }
 public Task OfflineAsync(GracefulShutdownMode mode) => Task.CompletedTask;
示例#13
0
 public Task OfflineAsync(GracefulShutdownMode mode) => throw new NotSupportedException();
 public override Task OfflineAsync(GracefulShutdownMode mode)
 {
     return(Task.CompletedTask);
 }
示例#15
0
 public Task OfflineAsync(GracefulShutdownMode mode)
 {
     return(Task.WhenAll(GetConnections().Select(s => s.OfflineAsync(mode))));
 }
示例#16
0
        private async Task OfflineAndWaitForCompletedAsync(GracefulShutdownMode mode)
        {
            await _serviceConnectionManager.OfflineAsync(mode);

            await _clientConnectionManager.WhenAllCompleted();
        }