mirror of
https://github.com/NoiTheCat/BirthdayBot.git
synced 2024-11-24 01:14:12 +00:00
45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace BirthdayBot.BackgroundServices
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Keeps track of the connection status, assigning a score based on either the connection's
|
|||
|
/// longevity or the amount of time it has remained persistently disconnected.
|
|||
|
/// </summary>
|
|||
|
class ConnectionStatus : BackgroundService
|
|||
|
{
|
|||
|
// About 5 minutes
|
|||
|
private const int StableScore = 300 / ShardBackgroundWorker.Interval;
|
|||
|
|
|||
|
public bool Stable { get { return Score >= StableScore; } }
|
|||
|
public int Score { get; private set; }
|
|||
|
|
|||
|
public ConnectionStatus(ShardInstance instance) : base(instance) { }
|
|||
|
|
|||
|
public override Task OnTick(CancellationToken token)
|
|||
|
{
|
|||
|
switch (ShardInstance.DiscordClient.ConnectionState)
|
|||
|
{
|
|||
|
case Discord.ConnectionState.Connected:
|
|||
|
if (Score < 0) Score = 0;
|
|||
|
Score++;
|
|||
|
break;
|
|||
|
default:
|
|||
|
if (Score > 0) Score = 0;
|
|||
|
Score--;
|
|||
|
break;
|
|||
|
}
|
|||
|
return Task.CompletedTask;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// In response to a disconnection event, will immediately reset a positive score to zero.
|
|||
|
/// </summary>
|
|||
|
public void Disconnected()
|
|||
|
{
|
|||
|
if (Score > 0) Score = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|