namespace Common.UI.ViewModels { using Common.Hardware.SIRT; using Common.UI.Infrastructure; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Timers; using System.Windows.Input; internal class HomeVM : VM { private readonly HashSet addresses433; private readonly HashSet addresses868; private readonly SIRTHub sirtHub; private readonly Timer timer; public HomeVM() { this.addresses433 = new HashSet(); this.addresses868 = new HashSet(); this.timer = new Timer(3000); this.timer.Elapsed += this.Timer_Elapsed; this.sirtHub = new SIRTHub(); this.StartScanning = new Command(this.StartScanning_Command); this.Addresses433 = new ObservableCollection(); this.Addresses868 = new ObservableCollection(); } public ICommand StartScanning { get; } public ObservableCollection Addresses433 { get; } public ObservableCollection Addresses868 { get; } private void StartScanning_Command() { this.InvokeTaskAsync(() => { this.timer.Start(); }); } private void SirtHub_MessageProcessed(SIRTMessage message) { var address = message.Address; if (address > 0) { if (message.Frequency == 433) { this.addresses433.Add(address); } else { this.addresses868.Add(address); } } } private void Timer_Elapsed(object sender, ElapsedEventArgs args) { this.InvokeAsync(() => { this.Addresses433.Clear(); foreach (var address in this.addresses433.OrderBy(x => x)) { this.Addresses433.Add(address); } this.Addresses868.Clear(); foreach (var address in this.addresses868.OrderBy(x => x)) { this.Addresses868.Add(address); } }); } } }