Files
watcher/Watcher/Services/NetworkCheck.cs

58 lines
1.6 KiB
C#

using System.Composition;
using System.Net.NetworkInformation;
namespace Watcher.Services;
public class NetworkCheck : BackgroundService
{
private readonly ILogger<NetworkCheck> _logger;
private INetworkCheckStore _NetworkCheckStore;
public NetworkCheck(ILogger<NetworkCheck> logger, INetworkCheckStore NetworkCheckStore)
{
_logger = logger;
_NetworkCheckStore = NetworkCheckStore;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var timer = new PeriodicTimer(TimeSpan.FromSeconds(30));
while (await timer.WaitForNextTickAsync(stoppingToken))
{
// Hintergrundprozess abwarten
await checkConnectionAsync();
// 5 Sekdunden Offset
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
public Task checkConnectionAsync()
{
_logger.LogInformation("Networkcheck started.");
string host = "8.8.8.8";
Ping p = new Ping();
try
{
PingReply reply = p.Send(host, 3000);
if (reply.Status == IPStatus.Success)
{
_NetworkCheckStore.NetworkStatus = "online";
_logger.LogInformation("Ping successfull. Watcher is online.");
}
}
catch
{
_NetworkCheckStore.NetworkStatus = "offline";
_logger.LogError("Ping failed. Watcher appears to have no network connection.");
}
_logger.LogInformation("Networkcheck finished.");
return Task.CompletedTask;
}
}