| @@ -36,6 +36,7 @@ namespace Discord.API | |||||
| private readonly SemaphoreSlim _connectionLock; | private readonly SemaphoreSlim _connectionLock; | ||||
| private CancellationTokenSource _loginCancelToken, _connectCancelToken; | private CancellationTokenSource _loginCancelToken, _connectCancelToken; | ||||
| private string _authToken; | private string _authToken; | ||||
| private string _gatewayUrl; | |||||
| private bool _isDisposed; | private bool _isDisposed; | ||||
| public LoginState LoginState { get; private set; } | public LoginState LoginState { get; private set; } | ||||
| @@ -199,14 +200,18 @@ namespace Discord.API | |||||
| if (_gatewayClient != null) | if (_gatewayClient != null) | ||||
| _gatewayClient.SetCancelToken(_connectCancelToken.Token); | _gatewayClient.SetCancelToken(_connectCancelToken.Token); | ||||
| var gatewayResponse = await GetGatewayAsync().ConfigureAwait(false); | |||||
| var url = $"{gatewayResponse.Url}?v={DiscordConfig.GatewayAPIVersion}&encoding={DiscordConfig.GatewayEncoding}"; | |||||
| await _gatewayClient.ConnectAsync(url).ConfigureAwait(false); | |||||
| if (_gatewayUrl == null) | |||||
| { | |||||
| var gatewayResponse = await GetGatewayAsync().ConfigureAwait(false); | |||||
| _gatewayUrl = $"{gatewayResponse.Url}?v={DiscordConfig.GatewayAPIVersion}&encoding={DiscordConfig.GatewayEncoding}"; | |||||
| } | |||||
| await _gatewayClient.ConnectAsync(_gatewayUrl).ConfigureAwait(false); | |||||
| ConnectionState = ConnectionState.Connected; | ConnectionState = ConnectionState.Connected; | ||||
| } | } | ||||
| catch (Exception) | catch (Exception) | ||||
| { | { | ||||
| _gatewayUrl = null; //Uncache in case the gateway url changed | |||||
| await DisconnectInternalAsync().ConfigureAwait(false); | await DisconnectInternalAsync().ConfigureAwait(false); | ||||
| throw; | throw; | ||||
| } | } | ||||