diff --git a/KfChatDotNetKickBot/Services/Discord.cs b/KfChatDotNetKickBot/Services/Discord.cs index 36d15c9..da43367 100644 --- a/KfChatDotNetKickBot/Services/Discord.cs +++ b/KfChatDotNetKickBot/Services/Discord.cs @@ -161,7 +161,16 @@ public class DiscordService "\"since\":0,\"activities\":[],\"afk\":false},\"compress\":false,\"client_state\":{\"guild_versions\":{}}}}"; _logger.Debug(initPayload); _wsClient.SendInstant(initPayload).Wait(_cancellationToken); - _heartbeatTask?.Dispose(); + if (_heartbeatTask != null) + { + _pingCts.Cancel(); + while (!_heartbeatTask.IsCompleted) + { + _logger.Debug("Waiting for heartbeat task to die"); + Task.Delay(TimeSpan.FromMilliseconds(100), _cancellationToken).Wait(_cancellationToken); + } + _heartbeatTask.Dispose(); + } _heartbeatInterval = TimeSpan.FromMilliseconds(packet.Data.GetProperty("heartbeat_interval").GetInt32()); _heartbeatTask = Task.Run(HeartbeatTimer, _cancellationToken); diff --git a/KfChatDotNetKickBot/Services/Howlgg.cs b/KfChatDotNetKickBot/Services/Howlgg.cs index 105b0bc..e80aeb1 100644 --- a/KfChatDotNetKickBot/Services/Howlgg.cs +++ b/KfChatDotNetKickBot/Services/Howlgg.cs @@ -143,7 +143,17 @@ public class Howlgg // Received on initial connection var packetData = JsonSerializer.Deserialize(message.Text.TrimStart('0')); _heartbeatInterval = TimeSpan.FromMilliseconds(packetData.GetProperty("pingInterval").GetInt32()); - _heartbeatTask?.Dispose(); + if (_heartbeatTask != null) + { + _pingCts.Cancel(); + while (!_heartbeatTask.IsCompleted) + { + _logger.Debug("Waiting for heartbeat task to die"); + Task.Delay(TimeSpan.FromMilliseconds(100), _cancellationToken).Wait(_cancellationToken); + } + _heartbeatTask.Dispose(); + } + _heartbeatTask = Task.Run(HeartbeatTimer, _cancellationToken); _logger.Info("Received connection packet from Howl.gg. Setting up heartbeat timer"); return;