From 934d080be5ffc5057593834a71bda74951ca8575 Mon Sep 17 00:00:00 2001 From: RogueException Date: Fri, 29 Jul 2016 17:20:14 -0300 Subject: [PATCH] Started adding Rpc events --- .../Rpc/DiscordRpcClient.Events.cs | 64 +++++++++++++++++++ src/Discord.Net/Rpc/DiscordRpcClient.cs | 56 +++++++++++++++- 2 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 src/Discord.Net/Rpc/DiscordRpcClient.Events.cs diff --git a/src/Discord.Net/Rpc/DiscordRpcClient.Events.cs b/src/Discord.Net/Rpc/DiscordRpcClient.Events.cs new file mode 100644 index 000000000..f614642af --- /dev/null +++ b/src/Discord.Net/Rpc/DiscordRpcClient.Events.cs @@ -0,0 +1,64 @@ +using System; +using System.Threading.Tasks; + +namespace Discord.Rpc +{ + public partial class DiscordRpcClient + { + //General + public event Func Connected + { + add { _connectedEvent.Add(value); } + remove { _connectedEvent.Remove(value); } + } + private readonly AsyncEvent> _connectedEvent = new AsyncEvent>(); + public event Func Disconnected + { + add { _disconnectedEvent.Add(value); } + remove { _disconnectedEvent.Remove(value); } + } + private readonly AsyncEvent> _disconnectedEvent = new AsyncEvent>(); + public event Func Ready + { + add { _readyEvent.Add(value); } + remove { _readyEvent.Remove(value); } + } + private readonly AsyncEvent> _readyEvent = new AsyncEvent>(); + + //Guild + public event Func GuildUpdated + { + add { _guildUpdatedEvent.Add(value); } + remove { _guildUpdatedEvent.Remove(value); } + } + private readonly AsyncEvent> _guildUpdatedEvent = new AsyncEvent>(); + + //Voice + public event Func VoiceStateUpdated + { + add { _voiceStateUpdatedEvent.Add(value); } + remove { _voiceStateUpdatedEvent.Remove(value); } + } + private readonly AsyncEvent> _voiceStateUpdatedEvent = new AsyncEvent>(); + + //Messages + public event Func MessageReceived + { + add { _messageReceivedEvent.Add(value); } + remove { _messageReceivedEvent.Remove(value); } + } + private readonly AsyncEvent> _messageReceivedEvent = new AsyncEvent>(); + public event Func MessageUpdated + { + add { _messageUpdatedEvent.Add(value); } + remove { _messageUpdatedEvent.Remove(value); } + } + private readonly AsyncEvent> _messageUpdatedEvent = new AsyncEvent>(); + public event Func MessageDeleted + { + add { _messageDeletedEvent.Add(value); } + remove { _messageDeletedEvent.Remove(value); } + } + private readonly AsyncEvent> _messageDeletedEvent = new AsyncEvent>(); + } +} diff --git a/src/Discord.Net/Rpc/DiscordRpcClient.cs b/src/Discord.Net/Rpc/DiscordRpcClient.cs index c798f1025..3916f4696 100644 --- a/src/Discord.Net/Rpc/DiscordRpcClient.cs +++ b/src/Discord.Net/Rpc/DiscordRpcClient.cs @@ -237,7 +237,7 @@ namespace Discord.Rpc { //CancellationToken = cancelToken //TODO: Implement }; - + if (LoginState != LoginState.LoggedOut) await ApiClient.SendAuthenticateAsync(options).ConfigureAwait(false); //Has bearer @@ -253,6 +253,58 @@ namespace Discord.Rpc } break; + //Guilds + case "GUILD_STATUS": + { + await _guildUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + + //Voice + case "VOICE_STATE_CREATE": + { + await _voiceStateUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + case "VOICE_STATE_UPDATE": + { + await _voiceStateUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + case "VOICE_STATE_DELETE": + { + await _voiceStateUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + + case "SPEAKING_START": + { + await _voiceStateUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + case "SPEAKING_STOP": + { + await _voiceStateUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + + //Messages + case "MESSAGE_CREATE": + { + await _messageReceivedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + case "MESSAGE_UPDATE": + { + await _messageUpdatedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + case "MESSAGE_DELETE": + { + await _messageDeletedEvent.InvokeAsync().ConfigureAwait(false); + } + break; + //Others default: await _rpcLogger.WarningAsync($"Unknown Dispatch ({evnt})").ConfigureAwait(false); @@ -260,7 +312,7 @@ namespace Discord.Rpc } break; - /*default: + /*default: //Other opcodes are used for command responses await _rpcLogger.WarningAsync($"Unknown OpCode ({cmd})").ConfigureAwait(false); return;*/ }