85 lines
2.8 KiB
C#
85 lines
2.8 KiB
C#
using System.Windows.Media;
|
|
using DesktopBot.Services;
|
|
|
|
namespace DesktopBot.ViewModels
|
|
{
|
|
/// <summary>
|
|
/// ViewModel per l'indicatore di ping verso Alpaca.
|
|
/// Esposto in MainViewModel e mostrato nella sidebar.
|
|
/// </summary>
|
|
public class PingViewModel : BaseViewModel
|
|
{
|
|
private int _latencyMs = -1;
|
|
private bool _isOnline;
|
|
private string _statusText = "---";
|
|
private Brush _statusColor;
|
|
|
|
private static readonly Brush BrushGood = new SolidColorBrush(Color.FromRgb(0x00, 0xC8, 0x5A)); // verde
|
|
private static readonly Brush BrushFair = new SolidColorBrush(Color.FromRgb(0xFF, 0xBF, 0x00)); // giallo
|
|
private static readonly Brush BrushPoor = new SolidColorBrush(Color.FromRgb(0xFF, 0x60, 0x00)); // arancione
|
|
private static readonly Brush BrushOffline = new SolidColorBrush(Color.FromRgb(0xFF, 0x33, 0x33)); // rosso
|
|
private static readonly Brush BrushIdle = new SolidColorBrush(Color.FromRgb(0x66, 0x66, 0x80)); // grigio
|
|
|
|
public int LatencyMs
|
|
{
|
|
get => _latencyMs;
|
|
private set => SetProperty(ref _latencyMs, value);
|
|
}
|
|
|
|
public bool IsOnline
|
|
{
|
|
get => _isOnline;
|
|
private set => SetProperty(ref _isOnline, value);
|
|
}
|
|
|
|
public string StatusText
|
|
{
|
|
get => _statusText;
|
|
private set => SetProperty(ref _statusText, value);
|
|
}
|
|
|
|
public Brush StatusColor
|
|
{
|
|
get => _statusColor ??= BrushIdle;
|
|
private set => SetProperty(ref _statusColor, value);
|
|
}
|
|
|
|
public void Update(PingResult result)
|
|
{
|
|
var dispatcher = System.Windows.Application.Current?.Dispatcher;
|
|
if (dispatcher != null && !dispatcher.CheckAccess())
|
|
{
|
|
dispatcher.Invoke(() => Apply(result));
|
|
return;
|
|
}
|
|
Apply(result);
|
|
}
|
|
|
|
private void Apply(PingResult result)
|
|
{
|
|
LatencyMs = result.LatencyMs;
|
|
IsOnline = result.IsSuccess;
|
|
|
|
switch (result.Status)
|
|
{
|
|
case PingStatus.Good:
|
|
StatusText = $"{result.LatencyMs} ms";
|
|
StatusColor = BrushGood;
|
|
break;
|
|
case PingStatus.Fair:
|
|
StatusText = $"{result.LatencyMs} ms";
|
|
StatusColor = BrushFair;
|
|
break;
|
|
case PingStatus.Poor:
|
|
StatusText = $"{result.LatencyMs} ms";
|
|
StatusColor = BrushPoor;
|
|
break;
|
|
default:
|
|
StatusText = "OFFLINE";
|
|
StatusColor = BrushOffline;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|