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();
}
}