Задача - проверить качество соединения с сайтом и само наличия соединения. К сайту подключение происходит только через специальный vpn. Я написал следующий код, который проверяет доступность сайта, если vpn выключен, то соединения не будет. А так же замеряю пинг до сайта и из него делаю предположение о качестве соединения. Меня гложат сомнения правильно ли я сделал и не похоже ли это на ддос, т.к. я часто отправляю запросы серверу? Пользователей программы будут десятки. Если что я новичок в сетевом программировании, подскажите пожалуйста и укажите на ошибки.
internal class ConnectionInfo
{
static HttpClient client = new HttpClient();
TextBlock connectionLabel;
TextBlock pingLabel;
public const long pingNoConnection = 999;
public long ping {get; private set;} = pingNoConnection;
public string status { get; private set; } = "-";
public ConnectionInfo(ref TextBlock connectionLabel, ref TextBlock pingLabel)
{
client.Timeout = TimeSpan.FromSeconds(2);
this.connectionLabel = connectionLabel;
this.pingLabel = pingLabel;
}
public async Task<long> PingSite(string hostNameStr)
{
try
{
Ping pingSender = new Ping();
Task<PingReply> replyTask = pingSender.SendPingAsync(hostNameStr);
PingReply reply = await replyTask;
return reply.RoundtripTime;
}
catch
{
return pingNoConnection;
}
}
public static async Task<string> ConnectionSiteStatus(string serverStr)
{
string resultStr;
try
{
using var result = await client.GetAsync(serverStr);
resultStr = result.StatusCode.ToString();
}
catch
{
resultStr = $"Нет подключения к {serverStr}";
}
return resultStr;
}
// Функция обновления статуса подключения и пинга
public async Task Update()
{
while (true)
{
await Task.Delay(1000);
status = await ConnectionSiteStatus("https://cis.bccipmt.com");
if (status != "OK")
{
connectionLabel.Text = "Подключение к CIS отсутствует";
connectionLabel.Foreground = Brushes.Red;
pingLabel.Text = "";
}
else
{
//connectionLabel.Text = $"Подключение: {responceStr}";
connectionLabel.Foreground = Brushes.Lime;
ping = await PingSite("cis.bccipmt.com");
string connectionQualityStr;
switch (ping)
{
case > 90:
connectionLabel.Foreground = Brushes.Red;
pingLabel.Foreground = Brushes.Red;
connectionQualityStr = "плохое";
break;
case > 50:
connectionLabel.Foreground = Brushes.Yellow;
pingLabel.Foreground = Brushes.Yellow;
connectionQualityStr = "среднее";
break;
case < 50:
connectionLabel.Foreground = Brushes.Lime;
pingLabel.Foreground = Brushes.Lime;
connectionQualityStr = "хорошее";
break;
default:
connectionQualityStr = "неизвестно";
break;
}
pingLabel.Text = $"Ping: {ping}";
connectionLabel.Text = $"Соединение: {connectionQualityStr}";
}
}
}
}