public CloudConnection(IConnection connection, IHubProtocol protocol, HubHostOptions options, HubLifetimeManager <THub> lifetimeManager, HubDispatcher <THub> hubDispatcher, ILoggerFactory loggerFactory) { _connection = connection ?? throw new ArgumentNullException(nameof(connection)); _protocol = protocol ?? throw new ArgumentNullException(nameof(protocol)); _options = options ?? throw new ArgumentNullException(nameof(options)); _lifetimeManager = lifetimeManager ?? throw new ArgumentNullException(nameof(lifetimeManager)); _hubDispatcher = hubDispatcher ?? throw new ArgumentNullException(nameof(hubDispatcher)); _loggerFactory = loggerFactory ?? NullLoggerFactory.Instance; _logger = _loggerFactory.CreateLogger <CloudConnection <THub> >(); _timeoutTimer = new Timer(state => ((CloudConnection <THub>)state).TimeoutElapsed(), this, Timeout.Infinite, Timeout.Infinite); _reconnectTimer = new Timer(state => ((CloudConnection <THub>)state).StartAsync().GetAwaiter().GetResult(), this, Timeout.Infinite, Timeout.Infinite); connection.OnReceived((data, state) => ((CloudConnection <THub>)state).OnDataReceivedAsync(data), this); connection.Closed += OnHttpConnectionClosed; }
internal void Configure(EndpointProvider endpointProvider, TokenProvider tokenProvider, HubHostOptions options = null) { if (_endpointProvider != null || _tokenProvider != null) { throw new InvalidOperationException( $"{typeof(THub).FullName} can only bind with one Azure SignalR instance. Binding to multiple instances is forbidden."); } _endpointProvider = endpointProvider ?? throw new ArgumentNullException(nameof(endpointProvider)); _tokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider)); if (options != null) { _options = options; } var serviceUrl = GetServiceUrl(); var httpOptions = new HttpOptions { AccessTokenFactory = () => _tokenProvider.GenerateServerAccessToken <THub>() }; // Simply create a couple of connections which connect to Azure SignalR for (var i = 0; i < _options.ConnectionNumber; i++) { var cloudConnection = CreateCloudConnection(serviceUrl, httpOptions); _cloudConnections.Add(cloudConnection); } }
public HubHost <THub> UseHub <THub>(HubHostOptions options = null) where THub : Hub { var hubHost = _serviceProvider.GetRequiredService <HubHost <THub> >(); hubHost.Configure(_endpointProvider, _tokenProvider, options); hubHost.StartAsync().GetAwaiter().GetResult(); return(hubHost); }
public HubHost(HubLifetimeManager <THub> lifetimeManager, IHubProtocolResolver protocolResolver, HubDispatcher <THub> hubDispatcher, IOptions <HubHostOptions> options, ILoggerFactory loggerFactory) { _lifetimeManager = lifetimeManager ?? throw new ArgumentNullException(nameof(lifetimeManager)); _protocolResolver = protocolResolver ?? throw new ArgumentNullException(nameof(protocolResolver)); _hubDispatcher = hubDispatcher ?? throw new ArgumentNullException(nameof(hubDispatcher)); _options = options != null ? options.Value : throw new ArgumentNullException(nameof(options)); _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); _logger = loggerFactory.CreateLogger <HubHost <THub> >(); }