From 2086a0fa044449c17c23bcf267c4afd9e4528e4f Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 26 Aug 2015 22:47:28 -0300 Subject: [PATCH] 0.6 beta2 - Added api/gateway --- src/Discord.Net/API/DiscordAPI.cs | 4 +++- src/Discord.Net/API/Endpoints.cs | 6 ++---- src/Discord.Net/API/Models/APIResponses.cs | 6 ++++++ src/Discord.Net/DiscordClient.cs | 12 +++++++----- src/Discord.Net/DiscordWebSocket.cs | 10 ++++------ src/Discord.Net/project.json | 2 +- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/Discord.Net/API/DiscordAPI.cs b/src/Discord.Net/API/DiscordAPI.cs index 0301b7fde..3117abf25 100644 --- a/src/Discord.Net/API/DiscordAPI.cs +++ b/src/Discord.Net/API/DiscordAPI.cs @@ -11,7 +11,9 @@ namespace Discord.API public const int MaxMessageSize = 2000; //Auth - public static async Task LoginAnonymous(string username) + public static Task GetWebSocket() + => Http.Get(Endpoints.Gateway); + public static async Task LoginAnonymous(string username) { var fingerprintResponse = await Http.Post(Endpoints.AuthFingerprint); var registerRequest = new APIRequests.AuthRegisterRequest { Fingerprint = fingerprintResponse.Fingerprint, Username = username }; diff --git a/src/Discord.Net/API/Endpoints.cs b/src/Discord.Net/API/Endpoints.cs index 81d101ef2..ca681408e 100644 --- a/src/Discord.Net/API/Endpoints.cs +++ b/src/Discord.Net/API/Endpoints.cs @@ -9,7 +9,8 @@ // /api public static readonly string BaseApi = $"{BaseHttps}/api"; - public static readonly string Track = $"{BaseApi}/track"; + //public static readonly string Track = $"{BaseApi}/track"; + public static readonly string Gateway = $"{BaseApi}/gateway"; // /api/auth public static readonly string Auth = $"{BaseApi}/auth"; @@ -49,9 +50,6 @@ public static readonly string VoiceRegions = $"{Voice}/regions"; public static readonly string VoiceIce = $"{Voice}/ice"; - //Web Sockets - public static readonly string WebSocket_Hub = $"{BaseUrl}/hub"; - //Website public static string InviteUrl(string code) => $"{BaseShortHttps}/{code}"; } diff --git a/src/Discord.Net/API/Models/APIResponses.cs b/src/Discord.Net/API/Models/APIResponses.cs index 5f3744e77..3f2a1d3e2 100644 --- a/src/Discord.Net/API/Models/APIResponses.cs +++ b/src/Discord.Net/API/Models/APIResponses.cs @@ -9,6 +9,12 @@ namespace Discord.API.Models { internal static class APIResponses { + public class Gateway + { + [JsonProperty(PropertyName = "url")] + public string Url; + } + public class AuthFingerprint { [JsonProperty(PropertyName = "fingerprint")] diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 6c9c1070a..1ea1ce479 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -301,7 +301,7 @@ namespace Discord try { await Task.Delay(_config.ReconnectDelay); - await _webSocket.ConnectAsync(Endpoints.WebSocket_Hub); + await _webSocket.ReconnectAsync(); await _webSocket.Login(); break; } @@ -587,7 +587,7 @@ namespace Discord { _currentVoiceEndpoint = data.Endpoint.Split(':')[0]; _currentVoiceToken = data.Token; - await _voiceWebSocket.ConnectAsync(_currentVoiceEndpoint); + await _voiceWebSocket.ConnectAsync("wss://" + _currentVoiceEndpoint); await _voiceWebSocket.Login(_currentVoiceServerId, UserId, SessionId, _currentVoiceToken); } #endif @@ -859,12 +859,14 @@ namespace Discord _blockEvent.Reset(); _disconnectToken = new CancellationTokenSource(); + string url = (await DiscordAPI.GetWebSocket()).Url; + //Connect by Token if (token != null) { try { - await _webSocket.ConnectAsync(Endpoints.WebSocket_Hub); + await _webSocket.ConnectAsync(url); Http.Token = token; await _webSocket.Login(); success = true; @@ -878,7 +880,7 @@ namespace Discord if (!success && password != null) //Email/Password login { //Open websocket while we wait for login response - Task socketTask = _webSocket.ConnectAsync(Endpoints.WebSocket_Hub); + Task socketTask = _webSocket.ConnectAsync(url); var response = await DiscordAPI.Login(emailOrUsername, password); await socketTask; @@ -891,7 +893,7 @@ namespace Discord if (!success && password == null) //Anonymous login { //Open websocket while we wait for login response - Task socketTask = _webSocket.ConnectAsync(Endpoints.WebSocket_Hub); + Task socketTask = _webSocket.ConnectAsync(url); var response = await DiscordAPI.LoginAnonymous(emailOrUsername); await socketTask; diff --git a/src/Discord.Net/DiscordWebSocket.cs b/src/Discord.Net/DiscordWebSocket.cs index 1104ab007..2c4c81c54 100644 --- a/src/Discord.Net/DiscordWebSocket.cs +++ b/src/Discord.Net/DiscordWebSocket.cs @@ -1,14 +1,10 @@ -using Discord.API.Models; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; +using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; -using System.Net; -using System.Linq; namespace Discord { @@ -47,7 +43,7 @@ namespace Discord _webSocket = new ClientWebSocket(); _webSocket.Options.KeepAliveInterval = TimeSpan.Zero; - await _webSocket.ConnectAsync(new Uri("wss://" + url), cancelToken); + await _webSocket.ConnectAsync(new Uri(url), cancelToken); _host = url; OnConnect(); @@ -78,6 +74,8 @@ namespace Discord _tasks = null; }); } + public Task ReconnectAsync() + => ConnectAsync(_host); public async Task DisconnectAsync() { if (_tasks != null) diff --git a/src/Discord.Net/project.json b/src/Discord.Net/project.json index 5cd169924..92eb40af7 100644 --- a/src/Discord.Net/project.json +++ b/src/Discord.Net/project.json @@ -1,5 +1,5 @@ { - "version": "0.6.0-beta1", + "version": "0.6.0-beta2", "description": "An unofficial .Net API wrapper for the Discord client.", "authors": [ "RogueException" ], "tags": [ "discord", "discordapp" ],