58 lines
1.6 KiB
C#
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;
|
|
}
|
|
} |