diff --git a/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs b/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs index 789264d..dc9f248 100644 --- a/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs +++ b/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs @@ -1,3 +1,4 @@ + using Activity = StevesBot.Worker.Discord.Gateway.Events.Data.Activity; namespace StevesBot.Worker.Discord.Gateway; @@ -674,7 +675,23 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient throw new DiscordGatewayClientException("WebSocket is already open. Cannot connect."); } - await _webSocket.ConnectAsync(uri, cancellationToken); + var connected = false; + var attempts = 0; + var delay = TimeSpan.FromSeconds(0); + + while (connected is false) + { + try + { + await Task.Delay(delay, cancellationToken); + await _webSocket.ConnectAsync(uri, cancellationToken); + connected = true; + } + catch (Exception e) when (e is WebSocketException) + { + // TODO: Implement exponential backoff retry strategy + } + } } private static Uri BuildUri(string url) diff --git a/src/src/StevesBot.Worker/Usings.cs b/src/src/StevesBot.Worker/Usings.cs index 7dce256..b6ca0ac 100644 --- a/src/src/StevesBot.Worker/Usings.cs +++ b/src/src/StevesBot.Worker/Usings.cs @@ -1,3 +1,4 @@ +global using System.Net; global using System.Net.WebSockets; global using System.Reflection; global using System.Text; @@ -19,4 +20,4 @@ global using StevesBot.Worker.Discord.Gateway.Events.Data; global using StevesBot.Worker.Handlers; global using StevesBot.Worker.Telemetry; global using StevesBot.Worker.Threading; -global using StevesBot.Worker.WebSockets; \ No newline at end of file +global using StevesBot.Worker.WebSockets;