public async Task ConnectAsync(CancellationToken cancellationToken)
        {
            var uri = _options.Uri;

            if (!uri.StartsWith("ws://", StringComparison.OrdinalIgnoreCase) && !uri.StartsWith("wss://", StringComparison.OrdinalIgnoreCase))
            {
                if (_options.TlsOptions?.UseTls == false)
                {
                    uri = "ws://" + uri;
                }
                else
                {
                    uri = "wss://" + uri;
                }
            }

            var clientWebSocket = new WasmWebSocket();

            //if (_options.ProxyOptions != null)
            //{
            //    clientWebSocket.Options.Proxy = CreateProxy();
            //}

            //if (_options.RequestHeaders != null)
            //{
            //    foreach (var requestHeader in _options.RequestHeaders)
            //    {
            //        clientWebSocket.Options.SetRequestHeader(requestHeader.Key, requestHeader.Value);
            //    }
            //}

            //if (_options.SubProtocols != null)
            //{
            //    foreach (var subProtocol in _options.SubProtocols)
            //    {
            //        clientWebSocket.Options.AddSubProtocol(subProtocol);
            //    }
            //}

            //if (_options.CookieContainer != null)
            //{
            //    clientWebSocket.Options.Cookies = _options.CookieContainer;
            //}

            //if (_options.TlsOptions?.UseTls == true && _options.TlsOptions?.Certificates != null)
            //{
            //    clientWebSocket.Options.ClientCertificates = new X509CertificateCollection();
            //    foreach (var certificate in _options.TlsOptions.Certificates)
            //    {
            //        clientWebSocket.Options.ClientCertificates.Add(new X509Certificate(certificate));
            //    }
            //}

            await clientWebSocket.ConnectAsync(new Uri(uri), cancellationToken).ConfigureAwait(false);

            _webSocket = clientWebSocket;

            IsSecureConnection = uri.StartsWith("wss://", StringComparison.OrdinalIgnoreCase);
        }
        public WasmMqttWebSocketChannel(WasmWebSocket webSocket, string endpoint, bool isSecureConnection, X509Certificate2 clientCertificate)
        {
            _webSocket = webSocket ?? throw new ArgumentNullException(nameof(webSocket));

            Endpoint           = endpoint;
            IsSecureConnection = isSecureConnection;
            ClientCertificate  = clientCertificate;
        }
        public void Dispose()
        {
            _sendLock?.Dispose();
            _sendLock = null;

            try
            {
                _webSocket?.Dispose();
            }
            catch (ObjectDisposedException)
            {
            }
            finally
            {
                _webSocket = null;
            }
        }