Esempio n. 1
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation($"WhisperHostedService<{nameof(TPackage)}, {nameof(TPackageFilter)}> started");

            var serverOptions = _serverOptions;

            if (serverOptions.Listeners?.Any() == true)
            {
                foreach (var listenerOption in serverOptions.Listeners)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return(Task.CompletedTask);
                    }

                    var listener = _channelListenerFactory.Create(listenerOption, serverOptions);
                    listener.OnNewChannelAccepted += this.OnNewChannelAccepted;
                    _channelListeners.Add(listener);
                    _logger.LogInformation($"Listener {listenerOption.IP}:{listenerOption.Port} Added");
                }
            }

            // Use ToList to ensure all listener is ready on ports
            var tasks = _channelListeners.Select(x => x.StartAsync()).ToList();

            _serverOptions.TriggerServerReady();

            return(Task.WhenAll(tasks));
        }