/// <summary>
 /// Create client
 /// </summary>
 /// <param name="config"></param>
 /// <param name="logger"></param>
 /// <param name="provider"></param>
 /// <param name="jsonSettings"></param>
 public SignalRHubClient(ISignalRClientConfig config, ILogger logger,
                         ITokenProvider provider = null, IJsonSerializerSettingsProvider jsonSettings = null)
 {
     _jsonSettings = jsonSettings;
     _config       = config ?? throw new ArgumentNullException(nameof(config));
     _logger       = logger ?? throw new ArgumentNullException(nameof(logger));
     _provider     = provider;
     _clients      = new Dictionary <string, SignalRClientRegistrar>();
     _lock         = new SemaphoreSlim(1, 1);
 }
示例#2
0
        /// <summary>
        /// Create client
        /// </summary>
        /// <param name="config"></param>
        /// <param name="logger"></param>
        public SignalRClient(ISignalRClientConfig config, ILogger logger)
        {
            _config  = config ?? throw new ArgumentNullException(nameof(config));
            _logger  = logger ?? throw new ArgumentNullException(nameof(logger));
            _clients = new Dictionary <string, SignalRClientRegistrar>();
            _lock    = new SemaphoreSlim(1, 1);

            // Garbage collect every 30 seconds
            _timer = new Timer(_ => TryGcAsync(), null,
                               TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30));
        }
            /// <summary>
            /// Create instance by creating client host and starting it.
            /// </summary>
            /// <param name="config"></param>
            /// <param name="jsonSettings"></param>
            /// <param name="endpointUrl"></param>
            /// <param name="logger"></param>
            /// <param name="resourceId"></param>
            /// <param name="provider"></param>
            /// <returns></returns>
            internal static async Task <SignalRClientRegistrar> CreateAsync(
                ISignalRClientConfig config, string endpointUrl, ILogger logger,
                string resourceId, ITokenProvider provider,
                IJsonSerializerSettingsProvider jsonSettings = null)
            {
                if (string.IsNullOrEmpty(endpointUrl))
                {
                    throw new ArgumentException(nameof(endpointUrl));
                }
                var host = new SignalRHubClientHost(endpointUrl,
                                                    config.UseMessagePackProtocol,
                                                    logger.ForContext <SignalRHubClientHost>(),
                                                    resourceId, provider, jsonSettings);

                await host.StartAsync().ConfigureAwait(false);

                return(new SignalRClientRegistrar(host));
            }
 /// <summary>
 /// Create client
 /// </summary>
 /// <param name="config"></param>
 /// <param name="logger"></param>
 public SignalRClientHost(ISignalRClientConfig config, ILogger logger) :
     this(config.SignalREndpointUrl, config.SignalRHubName, config.SignalRUserId, logger)
 {
 }