示例#1
0
        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);
        }
示例#2
0
        /// <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();
 }