From 2cdc0ad3713b8a15336364a5bdd4bb3999706f2e Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 6 Dec 2015 21:16:58 -0400 Subject: [PATCH] More cleanup and internal reordering --- .../Discord.Net.Audio.csproj | 15 ++-- .../API/Messages/GatewaySocket.cs | 20 ++++++ .../API/{Voice.cs => Messages/VoiceSocket.cs} | 0 src/Discord.Net.Audio/AudioService.cs | 2 +- src/Discord.Net.Audio/DiscordAudioClient.cs | 2 +- .../{ => WebSockets}/VoiceWebSocket.Events.cs | 0 .../Net/{ => WebSockets}/VoiceWebSocket.cs | 4 +- src/Discord.Net.Net45/Discord.Net.csproj | 61 +++++++---------- src/Discord.Net/API/{ => Messages}/Auth.cs | 0 .../API/{ => Messages}/Channels.cs | 0 .../GatewaySocket.cs} | 68 ++++++++++++++++--- src/Discord.Net/API/{ => Messages}/Invites.cs | 0 .../API/{ => Messages}/Maintenance.cs | 0 src/Discord.Net/API/{ => Messages}/Members.cs | 0 .../API/{ => Messages}/Messages.cs | 0 .../API/{ => Messages}/Permissions.cs | 0 src/Discord.Net/API/{ => Messages}/Roles.cs | 0 src/Discord.Net/API/{ => Messages}/Servers.cs | 16 +++++ src/Discord.Net/API/{ => Messages}/Users.cs | 12 ++++ src/Discord.Net/API/Presence.cs | 36 ---------- src/Discord.Net/API/Voice.cs | 56 --------------- src/Discord.Net/DiscordClient.Users.cs | 2 +- src/Discord.Net/DiscordClient.cs | 2 +- .../Net/WebSockets/GatewayWebSocket.cs | 66 +++++++++--------- .../WebSockets/GatewayWebSockets.Events.cs | 8 +-- src/Discord.Net/Net/WebSockets/WebSocket.cs | 9 +-- 26 files changed, 188 insertions(+), 191 deletions(-) create mode 100644 src/Discord.Net.Audio/API/Messages/GatewaySocket.cs rename src/Discord.Net.Audio/API/{Voice.cs => Messages/VoiceSocket.cs} (100%) rename src/Discord.Net.Audio/Net/{ => WebSockets}/VoiceWebSocket.Events.cs (100%) rename src/Discord.Net.Audio/Net/{ => WebSockets}/VoiceWebSocket.cs (99%) rename src/Discord.Net/API/{ => Messages}/Auth.cs (100%) rename src/Discord.Net/API/{ => Messages}/Channels.cs (100%) rename src/Discord.Net/API/{WebSockets.cs => Messages/GatewaySocket.cs} (64%) rename src/Discord.Net/API/{ => Messages}/Invites.cs (100%) rename src/Discord.Net/API/{ => Messages}/Maintenance.cs (100%) rename src/Discord.Net/API/{ => Messages}/Members.cs (100%) rename src/Discord.Net/API/{ => Messages}/Messages.cs (100%) rename src/Discord.Net/API/{ => Messages}/Permissions.cs (100%) rename src/Discord.Net/API/{ => Messages}/Roles.cs (100%) rename src/Discord.Net/API/{ => Messages}/Servers.cs (87%) rename src/Discord.Net/API/{ => Messages}/Users.cs (78%) delete mode 100644 src/Discord.Net/API/Presence.cs delete mode 100644 src/Discord.Net/API/Voice.cs diff --git a/src/Discord.Net.Audio.Net5/Discord.Net.Audio.csproj b/src/Discord.Net.Audio.Net5/Discord.Net.Audio.csproj index c7e559146..326fb88ae 100644 --- a/src/Discord.Net.Audio.Net5/Discord.Net.Audio.csproj +++ b/src/Discord.Net.Audio.Net5/Discord.Net.Audio.csproj @@ -43,8 +43,11 @@ - - API\Voice.cs + + API\Messages\GatewaySocket.cs + + + API\Messages\VoiceSocket.cs AudioExtensions.cs @@ -58,11 +61,11 @@ DiscordAudioClient.cs - - Net\VoiceWebSocket.cs + + Net\WebSockets\VoiceWebSocket.cs - - Net\VoiceWebSocket.Events.cs + + Net\WebSockets\VoiceWebSocket.Events.cs Opus.cs diff --git a/src/Discord.Net.Audio/API/Messages/GatewaySocket.cs b/src/Discord.Net.Audio/API/Messages/GatewaySocket.cs new file mode 100644 index 000000000..5415318c2 --- /dev/null +++ b/src/Discord.Net.Audio/API/Messages/GatewaySocket.cs @@ -0,0 +1,20 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Discord.API.Converters; +using Newtonsoft.Json; + +namespace Discord.Audio.API +{ + internal sealed class VoiceServerUpdateEvent + { + [JsonProperty("guild_id")] + [JsonConverter(typeof(LongStringConverter))] + public long ServerId; + [JsonProperty("endpoint")] + public string Endpoint; + [JsonProperty("token")] + public string Token; + } +} diff --git a/src/Discord.Net.Audio/API/Voice.cs b/src/Discord.Net.Audio/API/Messages/VoiceSocket.cs similarity index 100% rename from src/Discord.Net.Audio/API/Voice.cs rename to src/Discord.Net.Audio/API/Messages/VoiceSocket.cs diff --git a/src/Discord.Net.Audio/AudioService.cs b/src/Discord.Net.Audio/AudioService.cs index 07d0e1309..320bc4dee 100644 --- a/src/Discord.Net.Audio/AudioService.cs +++ b/src/Discord.Net.Audio/AudioService.cs @@ -149,7 +149,7 @@ namespace Discord.Audio { int id = unchecked(++_nextClientId); var logger = Client.Log().CreateLogger($"Voice #{id}"); - GatewayWebSocket dataSocket = null; + GatewayWebSocket gatewaySocket = null; var voiceSocket = new VoiceWebSocket(Client.Config, _config, logger); var voiceClient = new DiscordAudioClient(this, id, logger, gatewaySocket, voiceSocket); voiceClient.SetServerId(server.Id); diff --git a/src/Discord.Net.Audio/DiscordAudioClient.cs b/src/Discord.Net.Audio/DiscordAudioClient.cs index 6054ed37c..773a02761 100644 --- a/src/Discord.Net.Audio/DiscordAudioClient.cs +++ b/src/Discord.Net.Audio/DiscordAudioClient.cs @@ -59,7 +59,7 @@ namespace Discord.Audio _voiceSocket.ParentCancelToken = _cancelToken; };*/ - _gatewaySocket.ReceivedEvent += async (s, e) => + _gatewaySocket.ReceivedDispatch += async (s, e) => { try { diff --git a/src/Discord.Net.Audio/Net/VoiceWebSocket.Events.cs b/src/Discord.Net.Audio/Net/WebSockets/VoiceWebSocket.Events.cs similarity index 100% rename from src/Discord.Net.Audio/Net/VoiceWebSocket.Events.cs rename to src/Discord.Net.Audio/Net/WebSockets/VoiceWebSocket.Events.cs diff --git a/src/Discord.Net.Audio/Net/VoiceWebSocket.cs b/src/Discord.Net.Audio/Net/WebSockets/VoiceWebSocket.cs similarity index 99% rename from src/Discord.Net.Audio/Net/VoiceWebSocket.cs rename to src/Discord.Net.Audio/Net/WebSockets/VoiceWebSocket.cs index 28c068a29..88a3dbe76 100644 --- a/src/Discord.Net.Audio/Net/VoiceWebSocket.cs +++ b/src/Discord.Net.Audio/Net/WebSockets/VoiceWebSocket.cs @@ -527,9 +527,9 @@ namespace Discord.Net.WebSockets QueueMessage(isTalking); } - protected override object GetKeepAlive() + public override void SendHeartbeat() { - return new VoiceKeepAliveCommand(); + QueueMessage(new VoiceKeepAliveCommand()); } public void WaitForQueue() diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index 5e3ed9937..5f2abf662 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -68,15 +68,6 @@ - - API\Auth.cs - - - API\Bans.cs - - - API\Channels.cs - API\Converters\LongCollectionConverter.cs @@ -101,38 +92,38 @@ API\Enums\UserStatus.cs - - API\Invites.cs + + API\Messages\Auth.cs - - API\Maintenance.cs + + API\Messages\Channels.cs - - API\Members.cs + + API\Messages\GatewaySocket.cs - - API\Messages.cs + + API\Messages\Invites.cs - - API\Permissions.cs + + API\Messages\Maintenance.cs - - API\Presence.cs + + API\Messages\Members.cs - - API\Roles.cs + + API\Messages\Messages.cs - - API\Servers.cs + + API\Messages\Permissions.cs - - API\Users.cs + + API\Messages\Roles.cs - - API\Voice.cs + + API\Messages\Servers.cs - - API\WebSockets.cs + + API\Messages\Users.cs DiscordAPIClient.cs @@ -239,11 +230,11 @@ Net\Rest\SharpRestEngine.cs - - Net\WebSockets\DataWebSocket.cs + + Net\WebSockets\GatewayWebSocket.cs - - Net\WebSockets\DataWebSockets.Events.cs + + Net\WebSockets\GatewayWebSockets.Events.cs Net\WebSockets\IWebSocketEngine.cs diff --git a/src/Discord.Net/API/Auth.cs b/src/Discord.Net/API/Messages/Auth.cs similarity index 100% rename from src/Discord.Net/API/Auth.cs rename to src/Discord.Net/API/Messages/Auth.cs diff --git a/src/Discord.Net/API/Channels.cs b/src/Discord.Net/API/Messages/Channels.cs similarity index 100% rename from src/Discord.Net/API/Channels.cs rename to src/Discord.Net/API/Messages/Channels.cs diff --git a/src/Discord.Net/API/WebSockets.cs b/src/Discord.Net/API/Messages/GatewaySocket.cs similarity index 64% rename from src/Discord.Net/API/WebSockets.cs rename to src/Discord.Net/API/Messages/GatewaySocket.cs index 805254b15..18895da48 100644 --- a/src/Discord.Net/API/WebSockets.cs +++ b/src/Discord.Net/API/Messages/GatewaySocket.cs @@ -2,12 +2,26 @@ #pragma warning disable CS0649 #pragma warning disable CS0169 +using Discord.API.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections.Generic; namespace Discord.API { + public enum GatewayOpCodes : byte + { + Dispatch = 0, + Heartbeat = 1, + Identify = 2, + StatusUpdate = 3, + VoiceStateUpdate = 4, + //VoiceServerPing = 5, (Unused?) + Resume = 6, + Redirect = 7, + RequestGuildMembers = 8 + } + //Common public class WebSocketMessage { @@ -44,13 +58,13 @@ namespace Discord.API } //Commands - internal sealed class KeepAliveCommand : WebSocketMessage + internal sealed class HeartbeatCommand : WebSocketMessage { - public KeepAliveCommand() : base(1, EpochTime.GetMilliseconds()) { } + public HeartbeatCommand() : base((int)GatewayOpCodes.Heartbeat, EpochTime.GetMilliseconds()) { } } - internal sealed class LoginCommand : WebSocketMessage + internal sealed class IdentifyCommand : WebSocketMessage { - public LoginCommand() : base(2) { } + public IdentifyCommand() : base((int)GatewayOpCodes.Identify) { } public class Data { [JsonProperty("token")] @@ -65,9 +79,43 @@ namespace Discord.API public bool? Compress; } } + + internal sealed class StatusUpdateCommand : WebSocketMessage + { + public StatusUpdateCommand() : base((int)GatewayOpCodes.StatusUpdate) { } + public class Data + { + [JsonProperty("idle_since")] + public long? IdleSince; + [JsonProperty("game_id")] + public int? GameId; + } + } + + + //Commands + internal sealed class JoinVoiceCommand : WebSocketMessage + { + public JoinVoiceCommand() : base((int)GatewayOpCodes.VoiceStateUpdate) { } + public class Data + { + [JsonProperty("guild_id")] + [JsonConverter(typeof(LongStringConverter))] + public long ServerId; + [JsonProperty("channel_id")] + [JsonConverter(typeof(LongStringConverter))] + public long ChannelId; + [JsonProperty("self_mute")] + public string SelfMute; + [JsonProperty("self_deaf")] + public string SelfDeaf; + } + } + + //Events internal sealed class ResumeCommand : WebSocketMessage { - public ResumeCommand() : base(6) { } + public ResumeCommand() : base((int)GatewayOpCodes.Resume) { } public class Data { [JsonProperty("session_id")] @@ -105,15 +153,15 @@ namespace Discord.API [JsonProperty("heartbeat_interval")] public int HeartbeatInterval; } - internal sealed class ResumedEvent - { - [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval; - } internal sealed class RedirectEvent { [JsonProperty("url")] public string Url; } + internal sealed class ResumeEvent + { + [JsonProperty("heartbeat_interval")] + public int HeartbeatInterval; + } } diff --git a/src/Discord.Net/API/Invites.cs b/src/Discord.Net/API/Messages/Invites.cs similarity index 100% rename from src/Discord.Net/API/Invites.cs rename to src/Discord.Net/API/Messages/Invites.cs diff --git a/src/Discord.Net/API/Maintenance.cs b/src/Discord.Net/API/Messages/Maintenance.cs similarity index 100% rename from src/Discord.Net/API/Maintenance.cs rename to src/Discord.Net/API/Messages/Maintenance.cs diff --git a/src/Discord.Net/API/Members.cs b/src/Discord.Net/API/Messages/Members.cs similarity index 100% rename from src/Discord.Net/API/Members.cs rename to src/Discord.Net/API/Messages/Members.cs diff --git a/src/Discord.Net/API/Messages.cs b/src/Discord.Net/API/Messages/Messages.cs similarity index 100% rename from src/Discord.Net/API/Messages.cs rename to src/Discord.Net/API/Messages/Messages.cs diff --git a/src/Discord.Net/API/Permissions.cs b/src/Discord.Net/API/Messages/Permissions.cs similarity index 100% rename from src/Discord.Net/API/Permissions.cs rename to src/Discord.Net/API/Messages/Permissions.cs diff --git a/src/Discord.Net/API/Roles.cs b/src/Discord.Net/API/Messages/Roles.cs similarity index 100% rename from src/Discord.Net/API/Roles.cs rename to src/Discord.Net/API/Messages/Roles.cs diff --git a/src/Discord.Net/API/Servers.cs b/src/Discord.Net/API/Messages/Servers.cs similarity index 87% rename from src/Discord.Net/API/Servers.cs rename to src/Discord.Net/API/Messages/Servers.cs index ee5aa64d0..9eeaad688 100644 --- a/src/Discord.Net/API/Servers.cs +++ b/src/Discord.Net/API/Messages/Servers.cs @@ -5,6 +5,7 @@ using Discord.API.Converters; using Newtonsoft.Json; using System; +using System.Collections.Generic; namespace Discord.API { @@ -85,6 +86,21 @@ namespace Discord.API //Delete public sealed class DeleteServerResponse : GuildInfo { } + //GetRegions + public class GetRegionsResponse : List + { + public sealed class RegionData + { + [JsonProperty("sample_hostname")] + public string Hostname; + [JsonProperty("sample_port")] + public int Port; + [JsonProperty("id")] + public string Id; + [JsonProperty("name")] + public string Name; + } + } //Events internal sealed class GuildCreateEvent : ExtendedGuildInfo { } internal sealed class GuildUpdateEvent : GuildInfo { } diff --git a/src/Discord.Net/API/Users.cs b/src/Discord.Net/API/Messages/Users.cs similarity index 78% rename from src/Discord.Net/API/Users.cs rename to src/Discord.Net/API/Messages/Users.cs index cf10147e7..52ef3dfaf 100644 --- a/src/Discord.Net/API/Users.cs +++ b/src/Discord.Net/API/Messages/Users.cs @@ -46,6 +46,18 @@ namespace Discord.API //Events internal sealed class UserUpdateEvent : UserInfo { } + internal sealed class PresenceUpdateEvent : PresenceInfo { } + internal sealed class TypingStartEvent + { + [JsonProperty("user_id")] + [JsonConverter(typeof(LongStringConverter))] + public long UserId; + [JsonProperty("channel_id")] + [JsonConverter(typeof(LongStringConverter))] + public long ChannelId; + [JsonProperty("timestamp")] + public int Timestamp; + } internal sealed class BanAddEvent : MemberReference { } internal sealed class BanRemoveEvent : MemberReference { } } diff --git a/src/Discord.Net/API/Presence.cs b/src/Discord.Net/API/Presence.cs deleted file mode 100644 index 6c40a2c26..000000000 --- a/src/Discord.Net/API/Presence.cs +++ /dev/null @@ -1,36 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Discord.API.Converters; -using Newtonsoft.Json; - -namespace Discord.API -{ - //Commands - internal sealed class UpdateStatusCommand : WebSocketMessage - { - public UpdateStatusCommand() : base(3) { } - public class Data - { - [JsonProperty("idle_since")] - public long? IdleSince; - [JsonProperty("game_id")] - public int? GameId; - } - } - - //Events - internal sealed class TypingStartEvent - { - [JsonProperty("user_id")] - [JsonConverter(typeof(LongStringConverter))] - public long UserId; - [JsonProperty("channel_id")] - [JsonConverter(typeof(LongStringConverter))] - public long ChannelId; - [JsonProperty("timestamp")] - public int Timestamp; - } - internal sealed class PresenceUpdateEvent : PresenceInfo { } -} diff --git a/src/Discord.Net/API/Voice.cs b/src/Discord.Net/API/Voice.cs deleted file mode 100644 index d1f223a1e..000000000 --- a/src/Discord.Net/API/Voice.cs +++ /dev/null @@ -1,56 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Discord.API.Converters; -using Newtonsoft.Json; -using System.Collections.Generic; - -namespace Discord.API -{ - public class GetRegionsResponse : List - { - public sealed class RegionData - { - [JsonProperty("sample_hostname")] - public string Hostname; - [JsonProperty("sample_port")] - public int Port; - [JsonProperty("id")] - public string Id; - [JsonProperty("name")] - public string Name; - } - } - - //Commands - internal sealed class JoinVoiceCommand : WebSocketMessage - { - public JoinVoiceCommand() : base(4) { } - public class Data - { - [JsonProperty("guild_id")] - [JsonConverter(typeof(LongStringConverter))] - public long ServerId; - [JsonProperty("channel_id")] - [JsonConverter(typeof(LongStringConverter))] - public long ChannelId; - [JsonProperty("self_mute")] - public string SelfMute; - [JsonProperty("self_deaf")] - public string SelfDeaf; - } - } - - //Events - internal sealed class VoiceServerUpdateEvent - { - [JsonProperty("guild_id")] - [JsonConverter(typeof(LongStringConverter))] - public long ServerId; - [JsonProperty("endpoint")] - public string Endpoint; - [JsonProperty("token")] - public string Token; - } -} diff --git a/src/Discord.Net/DiscordClient.Users.cs b/src/Discord.Net/DiscordClient.Users.cs index 2b2b6af4c..e9c918a4f 100644 --- a/src/Discord.Net/DiscordClient.Users.cs +++ b/src/Discord.Net/DiscordClient.Users.cs @@ -302,7 +302,7 @@ namespace Discord } private Task SendStatus() { - _webSocket.SendStatus(_status == UserStatus.Idle ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (long?)null, _gameId); + _webSocket.SendStatusUpdate(_status == UserStatus.Idle ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (long?)null, _gameId); return TaskHelper.CompletedTask; } } diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index d65b43633..5468dcc6f 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -273,7 +273,7 @@ namespace Discord await socket.Reconnect(_token).ConfigureAwait(false); }; - socket.ReceivedEvent += async (s, e) => await OnReceivedEvent(e).ConfigureAwait(false); + socket.ReceivedDispatch += async (s, e) => await OnReceivedEvent(e).ConfigureAwait(false); return socket; } diff --git a/src/Discord.Net/Net/WebSockets/GatewayWebSocket.cs b/src/Discord.Net/Net/WebSockets/GatewayWebSocket.cs index 4c544adae..8e0a52a50 100644 --- a/src/Discord.Net/Net/WebSockets/GatewayWebSocket.cs +++ b/src/Discord.Net/Net/WebSockets/GatewayWebSocket.cs @@ -8,19 +8,6 @@ namespace Discord.Net.WebSockets { public partial class GatewayWebSocket : WebSocket { - internal enum OpCodes : byte - { - Dispatch = 0, - Heartbeat = 1, - Identify = 2, - StatusUpdate = 3, - VoiceStateUpdate = 4, - VoiceServerPing = 5, - Resume = 6, - Redirect = 7, - RequestGuildMembers = 8 - } - private int _lastSeq; public string SessionId => _sessionId; @@ -35,14 +22,8 @@ namespace Discord.Net.WebSockets { await BeginConnect().ConfigureAwait(false); await Start().ConfigureAwait(false); - - LoginCommand msg = new LoginCommand(); - msg.Payload.Token = token; - msg.Payload.Properties["$device"] = "Discord.Net"; - if (_config.UseLargeThreshold) - msg.Payload.LargeThreshold = 100; - msg.Payload.Compress = true; - QueueMessage(msg); + + SendIdentify(token); } private async Task Redirect(string server) { @@ -51,10 +32,7 @@ namespace Discord.Net.WebSockets await BeginConnect().ConfigureAwait(false); await Start().ConfigureAwait(false); - var resumeMsg = new ResumeCommand(); - resumeMsg.Payload.SessionId = _sessionId; - resumeMsg.Payload.Sequence = _lastSeq; - QueueMessage(resumeMsg); + SendResume(); } public async Task Reconnect(string token) { @@ -88,10 +66,10 @@ namespace Discord.Net.WebSockets if (msg.Sequence.HasValue) _lastSeq = msg.Sequence.Value; - var opCode = (OpCodes)msg.Operation; + var opCode = (GatewayOpCodes)msg.Operation; switch (opCode) { - case OpCodes.Dispatch: + case GatewayOpCodes.Dispatch: { JToken token = msg.Payload as JToken; if (msg.Type == "READY") @@ -102,15 +80,15 @@ namespace Discord.Net.WebSockets } else if (msg.Type == "RESUMED") { - var payload = token.ToObject(_serializer); + var payload = token.ToObject(_serializer); _heartbeatInterval = payload.HeartbeatInterval; } - RaiseReceivedEvent(msg.Type, token); + RaiseReceivedDispatch(msg.Type, token); if (msg.Type == "READY" || msg.Type == "RESUMED") EndConnect(); } break; - case OpCodes.Redirect: + case GatewayOpCodes.Redirect: { var payload = (msg.Payload as JToken).ToObject(_serializer); if (payload.Url != null) @@ -129,14 +107,33 @@ namespace Discord.Net.WebSockets } } - protected override object GetKeepAlive() + public void SendIdentify(string token) { - return new KeepAliveCommand(); + IdentifyCommand msg = new IdentifyCommand(); + msg.Payload.Token = token; + msg.Payload.Properties["$device"] = "Discord.Net"; + if (_config.UseLargeThreshold) + msg.Payload.LargeThreshold = 100; + msg.Payload.Compress = true; + QueueMessage(msg); } - public void SendStatus(long? idleSince, int? gameId) + public void SendResume() { - var updateStatus = new UpdateStatusCommand(); + var resumeMsg = new ResumeCommand(); + resumeMsg.Payload.SessionId = _sessionId; + resumeMsg.Payload.Sequence = _lastSeq; + QueueMessage(resumeMsg); + } + + public override void SendHeartbeat() + { + QueueMessage(new HeartbeatCommand()); + } + + public void SendStatusUpdate(long? idleSince, int? gameId) + { + var updateStatus = new StatusUpdateCommand(); updateStatus.Payload.IdleSince = idleSince; updateStatus.Payload.GameId = gameId; QueueMessage(updateStatus); @@ -155,6 +152,7 @@ namespace Discord.Net.WebSockets leaveVoice.Payload.ServerId = serverId; QueueMessage(leaveVoice); } + public void SendRequestUsers(long serverId, string query = "", int limit = 0) { var getOfflineUsers = new GetUsersCommand(); diff --git a/src/Discord.Net/Net/WebSockets/GatewayWebSockets.Events.cs b/src/Discord.Net/Net/WebSockets/GatewayWebSockets.Events.cs index 5721bdd2a..78f3c1ac5 100644 --- a/src/Discord.Net/Net/WebSockets/GatewayWebSockets.Events.cs +++ b/src/Discord.Net/Net/WebSockets/GatewayWebSockets.Events.cs @@ -16,11 +16,11 @@ namespace Discord.Net.WebSockets public partial class GatewayWebSocket { - public event EventHandler ReceivedEvent; - private void RaiseReceivedEvent(string type, JToken payload) + public event EventHandler ReceivedDispatch; + private void RaiseReceivedDispatch(string type, JToken payload) { - if (ReceivedEvent != null) - ReceivedEvent(this, new WebSocketEventEventArgs(type, payload)); + if (ReceivedDispatch != null) + ReceivedDispatch(this, new WebSocketEventEventArgs(type, payload)); } } } diff --git a/src/Discord.Net/Net/WebSockets/WebSocket.cs b/src/Discord.Net/Net/WebSockets/WebSocket.cs index 15f42d39b..e6a269b29 100644 --- a/src/Discord.Net/Net/WebSockets/WebSocket.cs +++ b/src/Discord.Net/Net/WebSockets/WebSocket.cs @@ -243,7 +243,6 @@ namespace Discord.Net.WebSockets _logger.Log(LogSeverity.Debug, $"In: {json}"); return TaskHelper.CompletedTask; } - protected abstract object GetKeepAlive(); protected void QueueMessage(object message) { @@ -255,7 +254,7 @@ namespace Discord.Net.WebSockets private Task HeartbeatAsync(CancellationToken cancelToken) { - return Task.Run(async () => + return Task.Run((Func)(async () => { try { @@ -263,7 +262,7 @@ namespace Discord.Net.WebSockets { if (_state == (int)WebSocketState.Connected) { - QueueMessage(GetKeepAlive()); + SendHeartbeat(); await Task.Delay(_heartbeatInterval, cancelToken).ConfigureAwait(false); } else @@ -271,7 +270,7 @@ namespace Discord.Net.WebSockets } } catch (OperationCanceledException) { } - }); + })); } protected internal void ThrowError() @@ -283,5 +282,7 @@ namespace Discord.Net.WebSockets reason.Throw(); } } + + public abstract void SendHeartbeat(); } }