Browse Source

More bug fixes

tags/docs-0.9
RogueException 9 years ago
parent
commit
f913734782
5 changed files with 29 additions and 22 deletions
  1. +1
    -2
      README.md
  2. +18
    -11
      src/Discord.Net/DiscordClient.cs
  3. +4
    -4
      src/Discord.Net/Net/RestClient.BuiltIn.cs
  4. +1
    -4
      src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs
  5. +5
    -1
      src/Discord.Net/Net/WebSockets/WebSocket.cs

+ 1
- 2
README.md View File

@@ -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) - Server Management (Servers, Channels, Messages, Invites)
- User Moderation (Kick/Ban/Unban/Mute/Unmute/Deafen/Undeafen) - User Moderation (Kick/Ban/Unban/Mute/Unmute/Deafen/Undeafen)
- Alpha Voice Support (Outgoing only currently) - 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 ### NuGet Packages
- [Discord.Net](https://www.nuget.org/packages/Discord.Net/) - [Discord.Net](https://www.nuget.org/packages/Discord.Net/)
@@ -55,4 +55,3 @@ await client.AcceptInvite("channel-invite-code");
### Known Issues ### Known Issues
- Due to current Discord restrictions, private messages are blocked unless both the sender and recipient are members of the same server. - 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. - 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.

+ 18
- 11
src/Discord.Net/DiscordClient.cs View File

@@ -79,7 +79,8 @@ namespace Discord
_api = new DiscordAPIClient(_config.LogLevel); _api = new DiscordAPIClient(_config.LogLevel);
_dataSocket = new DataWebSocket(this); _dataSocket = new DataWebSocket(this);
_dataSocket.Connected += (s, e) => { if (_state == (int)DiscordClientState.Connecting) CompleteConnect(); }; _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); _channels = new Channels(this);
_members = new Members(this); _members = new Members(this);
@@ -89,14 +90,18 @@ namespace Discord
_users = new Users(this); _users = new Users(this);


_dataSocket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.DataWebSocket, e.Message); _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) if (_config.LogLevel >= LogMessageSeverity.Info)
{ {
_dataSocket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Connected"); _dataSocket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Connected");
_dataSocket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Disconnected"); _dataSocket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Disconnected");
_dataSocket.ReceievedEvent += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, $"Receieved {e.Type}"); _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) 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})"); 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})"); 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})."); 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})."); 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})."); 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})."); 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.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.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.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.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.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.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.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.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.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) => _api.RestClient.OnRequest += (s, e) =>
{ {
@@ -514,12 +519,14 @@ namespace Discord


try 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."); throw new Exception("Operation timed out.");
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
_dataSocket.ThrowError();
_dataSocket.ThrowError(); //Throws data socket's internal error if any occured
throw; throw;
} }




+ 4
- 4
src/Discord.Net/Net/RestClient.BuiltIn.cs View File

@@ -35,23 +35,23 @@ namespace Discord.Net
_client.DefaultRequestHeaders.Add("authorization", token); _client.DefaultRequestHeaders.Add("authorization", token);
} }


public Task<string> Send(HttpMethod method, string path, string json, CancellationToken cancelToken)
public async Task<string> Send(HttpMethod method, string path, string json, CancellationToken cancelToken)
{ {
using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path))
{ {
if (json != null) if (json != null)
request.Content = new StringContent(json, Encoding.UTF8, "application/json"); request.Content = new StringContent(json, Encoding.UTF8, "application/json");
return Send(request, cancelToken);
return await Send(request, cancelToken);
} }
} }
public Task<string> SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken)
public async Task<string> SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken)
{ {
using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path))
{ {
var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)); var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture));
content.Add(new StreamContent(File.OpenRead(filePath)), "file", Path.GetFileName(filePath)); content.Add(new StreamContent(File.OpenRead(filePath)), "file", Path.GetFileName(filePath));
request.Content = content; request.Content = content;
return Send(request, cancelToken);
return await Send(request, cancelToken);
} }
} }
private async Task<string> Send(HttpRequestMessage request, CancellationToken cancelToken) private async Task<string> Send(HttpRequestMessage request, CancellationToken cancelToken)


+ 1
- 4
src/Discord.Net/Net/WebSockets/WebSocket.BuiltIn.cs View File

@@ -89,10 +89,7 @@ namespace Discord.Net.WebSockets


} }
while (result == null || !result.EndOfMessage); while (result == null || !result.EndOfMessage);

#if DEBUG
System.Diagnostics.Debug.WriteLine(">>> " + builder.ToString());
#endif
RaiseProcessMessage(builder.ToString()); RaiseProcessMessage(builder.ToString());


builder.Clear(); builder.Clear();


+ 5
- 1
src/Discord.Net/Net/WebSockets/WebSocket.cs View File

@@ -197,7 +197,11 @@ namespace Discord.Net.WebSockets
internal void ThrowError() internal void ThrowError()
{ {
if (_wasDisconnectUnexpected) if (_wasDisconnectUnexpected)
_disconnectReason.Throw();
{
var reason = _disconnectReason;
_disconnectReason = null;
reason.Throw();
}
} }
} }
} }

Loading…
Cancel
Save