Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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> >();
        }