From 24e71f7c1aa0fbd01ae2085a55b0110db578b3d6 Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 6 Apr 2016 23:48:14 -0300 Subject: [PATCH] Request gateway v4, support reconnects --- src/Discord.Net.Net45/Discord.Net.csproj | 4 ++-- .../API/Client/GatewaySocket/Commands/Identify.cs | 2 -- src/Discord.Net/API/Client/GatewaySocket/Events/Reconnect.cs | 6 ++++++ src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs | 10 ---------- src/Discord.Net/API/Client/GatewaySocket/OpCodes.cs | 2 +- src/Discord.Net/API/Client/Rest/Gateway.cs | 10 +++++----- src/Discord.Net/Net/WebSockets/GatewaySocket.cs | 12 +++--------- 7 files changed, 17 insertions(+), 29 deletions(-) create mode 100644 src/Discord.Net/API/Client/GatewaySocket/Events/Reconnect.cs delete mode 100644 src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index b26180c07..56cd26bf7 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -199,8 +199,8 @@ API\Client\GatewaySocket\Events\Ready.cs - - API\Client\GatewaySocket\Events\Redirect.cs + + API\Client\GatewaySocket\Events\Reconnect.cs API\Client\GatewaySocket\Events\Resumed.cs diff --git a/src/Discord.Net/API/Client/GatewaySocket/Commands/Identify.cs b/src/Discord.Net/API/Client/GatewaySocket/Commands/Identify.cs index 8437f595c..f3141e56c 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Commands/Identify.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Commands/Identify.cs @@ -10,8 +10,6 @@ namespace Discord.API.Client.GatewaySocket object IWebSocketMessage.Payload => this; bool IWebSocketMessage.IsPrivate => false; - [JsonProperty("v")] - public int Version { get; set; } [JsonProperty("token")] public string Token { get; set; } [JsonProperty("properties")] diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Reconnect.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Reconnect.cs new file mode 100644 index 000000000..7ceaa3046 --- /dev/null +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/Reconnect.cs @@ -0,0 +1,6 @@ +using Newtonsoft.Json; + +namespace Discord.API.Client.GatewaySocket +{ + public class ReconnectEvent { } +} diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs deleted file mode 100644 index fe9d644d4..000000000 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Newtonsoft.Json; - -namespace Discord.API.Client.GatewaySocket -{ - public class RedirectEvent - { - [JsonProperty("url")] - public string Url { get; set; } - } -} diff --git a/src/Discord.Net/API/Client/GatewaySocket/OpCodes.cs b/src/Discord.Net/API/Client/GatewaySocket/OpCodes.cs index 9942c670e..497b4d3e2 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/OpCodes.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/OpCodes.cs @@ -17,7 +17,7 @@ /// C→S - Used to resume a connection after a redirect occurs. Resume = 6, /// C←S - Used to notify a client that they must reconnect to another gateway. - Redirect = 7, + Reconnect = 7, /// C→S - Used to request all members that were withheld by large_threshold RequestGuildMembers = 8 } diff --git a/src/Discord.Net/API/Client/Rest/Gateway.cs b/src/Discord.Net/API/Client/Rest/Gateway.cs index 02dd71008..c190fad7b 100644 --- a/src/Discord.Net/API/Client/Rest/Gateway.cs +++ b/src/Discord.Net/API/Client/Rest/Gateway.cs @@ -6,13 +6,13 @@ namespace Discord.API.Client.Rest public class GatewayRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"gateway"; + string IRestRequest.Endpoint => $"gateway?encoding=json&v=4"; object IRestRequest.Payload => null; } - + public class GatewayResponse - { - [JsonProperty("url")] - public string Url { get; set; } + { + [JsonProperty("url")] + public string Url { get; set; } } } diff --git a/src/Discord.Net/Net/WebSockets/GatewaySocket.cs b/src/Discord.Net/Net/WebSockets/GatewaySocket.cs index 4afe5aae7..adc40897e 100644 --- a/src/Discord.Net/Net/WebSockets/GatewaySocket.cs +++ b/src/Discord.Net/Net/WebSockets/GatewaySocket.cs @@ -131,15 +131,10 @@ namespace Discord.Net.WebSockets } } break; - case OpCodes.Redirect: + case OpCodes.Reconnect: { - var payload = (msg.Payload as JToken).ToObject(_serializer); - if (payload.Url != null) - { - Host = payload.Url; - Logger.Info("Redirected to " + payload.Url); - await Reconnect().ConfigureAwait(false); - } + var payload = (msg.Payload as JToken).ToObject(_serializer); + await Reconnect().ConfigureAwait(false); } break; default: @@ -159,7 +154,6 @@ namespace Discord.Net.WebSockets }; var msg = new IdentifyCommand() { - Version = 3, Token = token, Properties = props, LargeThreshold = _config.LargeThreshold,