/// <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); }
/// <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) { }