@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel;
using System.IO;
using System.IO;
using System.Net;
using System.Net.WebSockets;
using System.Net.WebSockets;
using System.Text;
using System.Text;
using System.Threading;
using System.Threading;
@@ -23,18 +24,20 @@ namespace Discord.Net.WebSockets
private readonly SemaphoreSlim _lock;
private readonly SemaphoreSlim _lock;
private readonly Dictionary<string, string> _headers;
private readonly Dictionary<string, string> _headers;
private ClientWebSocket _client;
private ClientWebSocket _client;
private IWebProxy _proxy;
private Task _task;
private Task _task;
private CancellationTokenSource _cancelTokenSource;
private CancellationTokenSource _cancelTokenSource;
private CancellationToken _cancelToken, _parentToken;
private CancellationToken _cancelToken, _parentToken;
private bool _isDisposed, _isDisconnecting;
private bool _isDisposed, _isDisconnecting;
public DefaultWebSocketClient()
public DefaultWebSocketClient(IWebProxy proxy = null )
{
{
_lock = new SemaphoreSlim(1, 1);
_lock = new SemaphoreSlim(1, 1);
_cancelTokenSource = new CancellationTokenSource();
_cancelTokenSource = new CancellationTokenSource();
_cancelToken = CancellationToken.None;
_cancelToken = CancellationToken.None;
_parentToken = CancellationToken.None;
_parentToken = CancellationToken.None;
_headers = new Dictionary<string, string>();
_headers = new Dictionary<string, string>();
_proxy = proxy;
}
}
private void Dispose(bool disposing)
private void Dispose(bool disposing)
{
{
@@ -70,7 +73,7 @@ namespace Discord.Net.WebSockets
_cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token;
_cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token;
_client = new ClientWebSocket();
_client = new ClientWebSocket();
_client.Options.Proxy = null ;
_client.Options.Proxy = _proxy ;
_client.Options.KeepAliveInterval = TimeSpan.Zero;
_client.Options.KeepAliveInterval = TimeSpan.Zero;
foreach (var header in _headers)
foreach (var header in _headers)
{
{