From f913734782f40a6e01b6f7078fb57b7882aea8b4 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 15 Sep 2015 13:29:28 -0300 Subject: [PATCH] More bug fixes --- README.md | 3 +- src/Discord.Net/DiscordClient.cs | 29 ++++++++++++------- src/Discord.Net/Net/RestClient.BuiltIn.cs | 8 ++--- .../Net/WebSockets/WebSocket.BuiltIn.cs | 5 +--- src/Discord.Net/Net/WebSockets/WebSocket.cs | 6 +++- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 3a165f253..f74ba8e07 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Discord.Net itself is also in alpha so several functions may be unstable or not - Server Management (Servers, Channels, Messages, Invites) - User Moderation (Kick/Ban/Unban/Mute/Unmute/Deafen/Undeafen) - Alpha Voice Support (Outgoing only currently) -- Supports .Net 4.5 and DNX 4.5.1 +- Supports .Net 4.5, DNX 4.5.1 and DNX Core 5.0 (Windows only) ### NuGet Packages - [Discord.Net](https://www.nuget.org/packages/Discord.Net/) @@ -55,4 +55,3 @@ await client.AcceptInvite("channel-invite-code"); ### Known Issues - Due to current Discord restrictions, private messages are blocked unless both the sender and recipient are members of the same server. - Caches do not currently clean up when their entries are no longer referenced, and there is no cap to the message cache. For now, disconencting and reconnecting will clear all caches. -- DNX Core 5.0 support is waiting on websockets to be implemented. diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 4e90ca5cb..fd363277a 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -79,7 +79,8 @@ namespace Discord _api = new DiscordAPIClient(_config.LogLevel); _dataSocket = new DataWebSocket(this); _dataSocket.Connected += (s, e) => { if (_state == (int)DiscordClientState.Connecting) CompleteConnect(); }; - _voiceSocket = new VoiceWebSocket(this); + if (_config.EnableVoice) + _voiceSocket = new VoiceWebSocket(this); _channels = new Channels(this); _members = new Members(this); @@ -89,14 +90,18 @@ namespace Discord _users = new Users(this); _dataSocket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.DataWebSocket, e.Message); - _voiceSocket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.VoiceWebSocket, e.Message); + if (_config.EnableVoice) + _voiceSocket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.VoiceWebSocket, e.Message); if (_config.LogLevel >= LogMessageSeverity.Info) { _dataSocket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Connected"); _dataSocket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Disconnected"); _dataSocket.ReceievedEvent += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, $"Receieved {e.Type}"); - _voiceSocket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.VoiceWebSocket, "Connected"); - _voiceSocket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.VoiceWebSocket, "Disconnected"); + if (_config.EnableVoice) + { + _voiceSocket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.VoiceWebSocket, "Connected"); + _voiceSocket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.VoiceWebSocket, "Disconnected"); + } } if (_config.LogLevel >= LogMessageSeverity.Verbose) { @@ -115,7 +120,7 @@ namespace Discord MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Read Message (Remotely): {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Sent Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); - RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Update Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); + RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added Ban: {e.Server.Name}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Ban: {e.Server.Name}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); @@ -137,16 +142,16 @@ namespace Discord _messages.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Created Message {e.Item.ServerId}/{e.Item.ChannelId}/{e.Item.Id}"); _messages.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Destroyed Message {e.Item.ServerId}/{e.Item.ChannelId}/{e.Item.Id}"); _messages.ItemRemapped += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Remapped Message {e.Item.ServerId}/{e.Item.ChannelId}/[{e.OldId} -> {e.NewId}]"); - _messages.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Members"); + _messages.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Messages"); _roles.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Created Role {e.Item.ServerId}/{e.Item.Id}"); _roles.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Destroyed Role {e.Item.ServerId}/{e.Item.Id}"); - _roles.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Members"); + _roles.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Roles"); _servers.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Created Server {e.Item.Id}"); _servers.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Destroyed Server {e.Item.Id}"); - _servers.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Members"); + _servers.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Servers"); _users.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Created User {e.Item.Id}"); _users.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Destroyed User {e.Item.Id}"); - _users.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Members"); + _users.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Cache, $"Cleared Users"); _api.RestClient.OnRequest += (s, e) => { @@ -514,12 +519,14 @@ namespace Discord try { - if (!_connectedEvent.Wait(_config.ConnectionTimeout, CancellationTokenSource.CreateLinkedTokenSource(_cancelToken.Token, _dataSocket.CancelToken).Token)) + //Cancel if either Disconnect is called, data socket errors or timeout is reached + var cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_cancelToken.Token, _dataSocket.CancelToken).Token; + if (!_connectedEvent.Wait(_config.ConnectionTimeout, cancelToken)) throw new Exception("Operation timed out."); } catch (OperationCanceledException) { - _dataSocket.ThrowError(); + _dataSocket.ThrowError(); //Throws data socket's internal error if any occured throw; } diff --git a/src/Discord.Net/Net/RestClient.BuiltIn.cs b/src/Discord.Net/Net/RestClient.BuiltIn.cs index de9657aff..6d538b2b5 100644 --- a/src/Discord.Net/Net/RestClient.BuiltIn.cs +++ b/src/Discord.Net/Net/RestClient.BuiltIn.cs @@ -35,23 +35,23 @@ namespace Discord.Net _client.DefaultRequestHeaders.Add("authorization", token); } - public Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken) + public async Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken) { using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) { if (json != null) request.Content = new StringContent(json, Encoding.UTF8, "application/json"); - return Send(request, cancelToken); + return await Send(request, cancelToken); } } - public Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken) + public async Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken) { using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) { var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)); content.Add(new StreamContent(File.OpenRead(filePath)), "file", Path.GetFileName(filePath)); request.Content = content; - return Send(request, cancelToken); + return await Send(request, cancelToken); } } private async Task Send(HttpRequestMessage request, CancellationToken cancelToken) diff --git a/src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs b/src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs index 224908f4e..725b0e330 100644 --- a/src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs +++ b/src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs @@ -89,10 +89,7 @@ namespace Discord.Net.WebSockets } while (result == null || !result.EndOfMessage); - -#if DEBUG - System.Diagnostics.Debug.WriteLine(">>> " + builder.ToString()); -#endif + RaiseProcessMessage(builder.ToString()); builder.Clear(); diff --git a/src/Discord.Net/Net/WebSockets/WebSocket.cs b/src/Discord.Net/Net/WebSockets/WebSocket.cs index 827e8e450..793908a7a 100644 --- a/src/Discord.Net/Net/WebSockets/WebSocket.cs +++ b/src/Discord.Net/Net/WebSockets/WebSocket.cs @@ -197,7 +197,11 @@ namespace Discord.Net.WebSockets internal void ThrowError() { if (_wasDisconnectUnexpected) - _disconnectReason.Throw(); + { + var reason = _disconnectReason; + _disconnectReason = null; + reason.Throw(); + } } } }