public static IClientWebSocketBuilder AddTypedWebSocketCore <TClient>(this IClientWebSocketBuilder builder, Func <ClientWebSocket, TClient> factory, bool validateSingleType) where TClient : class { ReserveClient(builder, typeof(TClient), builder.Name, validateSingleType); builder.Services.AddTransient <TClient>(s => { IClientWebSocketFactory httpClientFactory = s.GetRequiredService <IClientWebSocketFactory>(); ClientWebSocket client = httpClientFactory.CreateClient(builder.Name); return(factory(client)); }); return(builder); }
/// <summary> /// Instance a new HassClient /// </summary> /// <param name="logFactory">The LogFactory to use for logging, null uses default values from config.</param> /// <param name="wsFactory">The factory to use for websockets, mainly for testing purposes</param> /// <param name="httpMessageHandler">httpMessage handler (used for mocking)</param> internal HassClient( ILoggerFactory?logFactory, ITransportPipelineFactory <HassMessage>?pipelineFactory, IClientWebSocketFactory?wsFactory, HttpMessageHandler?httpMessageHandler) { logFactory ??= _getDefaultLoggerFactory; wsFactory ??= new ClientWebSocketFactory(); var bypassCertificateErrorsForHash = Environment.GetEnvironmentVariable("HASSCLIENT_BYPASS_CERT_ERR"); if (httpMessageHandler is null && bypassCertificateErrorsForHash is object) { _httpClientHandler = new HttpClientHandler(); _httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) => { if (sslPolicyErrors == SslPolicyErrors.None) { return(true); //Is valid } if (cert.GetCertHashString() == bypassCertificateErrorsForHash.ToUpperInvariant()) { return(true); } return(false); }; httpMessageHandler = _httpClientHandler; } _httpClient = httpMessageHandler != null ? new HttpClient(httpMessageHandler) : new HttpClient(); _wsFactory = wsFactory; _pipelineFactory = pipelineFactory; _loggerFactory = logFactory; _logger = logFactory.CreateLogger <HassClient>(); _messageLogLevel = Environment.GetEnvironmentVariable("HASSCLIENT_MSGLOGLEVEL") ?? "Default"; }
/// <summary> /// Constructor. /// </summary> /// <param name="clientWebSocketFactory"></param> /// <param name="logger"></param> public DefaultWebSocketClient(IClientWebSocketFactory clientWebSocketFactory = null, ILogger <DefaultWebSocketClient> logger = null) : base(logger) { _clientWebSocketFactory = clientWebSocketFactory ?? new ClientWebSocketFactory(); }