From 3c181c5740418ed16c89ee7363585bf595139cb0 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Sun, 6 Sep 2015 04:02:31 -0300 Subject: [PATCH] Pass token to /gateway --- src/Discord.Net/API/DiscordAPI.cs | 2 +- src/Discord.Net/DiscordClient.cs | 28 ++++++++++++---------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/Discord.Net/API/DiscordAPI.cs b/src/Discord.Net/API/DiscordAPI.cs index c54dc76e5..c8271bb65 100644 --- a/src/Discord.Net/API/DiscordAPI.cs +++ b/src/Discord.Net/API/DiscordAPI.cs @@ -17,7 +17,7 @@ namespace Discord.API } //Auth - public Task GetWebSocket() + public Task GetWebSocketEndpoint() => _http.Get(Endpoints.Gateway); public async Task LoginAnonymous(string username) { diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index f01df398e..c50cae918 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -514,25 +514,21 @@ namespace Discord public async Task ConnectInternal(string emailOrUsername, string password, string token) { bool success = false; + string url = null; + await Disconnect(); _blockEvent.Reset(); _disconnectToken = new CancellationTokenSource(); - string url = (await _api.GetWebSocket()).Url; - if (token != null) { try { //Login using cached token - await _webSocket.ConnectAsync(url); - if (_isDebugMode) - RaiseOnDebugMessage(DebugMessageType.Connection, $"DataSocket connected."); _http.Token = token; - - await _webSocket.Login(_http.Token); + url = (await _api.GetWebSocketEndpoint()).Url; if (_isDebugMode) - RaiseOnDebugMessage(DebugMessageType.Connection, $"DataSocket got token."); + RaiseOnDebugMessage(DebugMessageType.Connection, $"DataSocket connected."); success = true; } catch (InvalidOperationException) //Bad Token @@ -545,9 +541,6 @@ namespace Discord } if (!success) { - //Open websocket while we wait for login response - Task socketTask = _webSocket.ConnectAsync(url); - if (password != null) //Normal Login { var response = await _api.Login(emailOrUsername, password); @@ -562,16 +555,16 @@ namespace Discord RaiseOnDebugMessage(DebugMessageType.Connection, $"DataSocket generated anonymous token."); token = response.Token; } - _http.Token = token; - //Wait for websocket to finish connecting, then send token - await socketTask; - await _webSocket.Login(_http.Token); + _http.Token = token; + url = (await _api.GetWebSocketEndpoint()).Url; success = true; } - if (success) { + await _webSocket.ConnectAsync(url); + await _webSocket.Login(token); + if (_config.UseMessageQueue) _mainTask = MessageQueueLoop(); else @@ -600,7 +593,10 @@ namespace Discord _isConnected = true; } else + { token = null; + _http.Token = null; + } return token; } /// Disconnects from the Discord server, canceling any pending requests.