public WebSocket(IWindow window, String url, params String[] protocols)
{
_url = new Url(url);
_state = WebSocketReadyState.Connecting;
_cts = new CancellationTokenSource();
_window = window;
if (_url.IsInvalid || _url.IsRelative)
{
throw new DomException(DomError.Syntax);
}
var invalid = protocols.Length - protocols.Distinct().Where(IsValid).Count();
if (invalid > 0)
{
throw new DomException(DomError.Syntax);
}
_ws = new ClientWebSocket();
foreach (var protocol in protocols)
{
_ws.Options.AddSubProtocol(protocol);
}
_ws.Options.KeepAliveInterval = TimeSpan.FromSeconds(20);
ConnectAsync(url).Forget();
_window.Unloaded += OnUnload;
}