| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | using System;using System.ComponentModel;using System.Runtime.CompilerServices;using System.Windows.Input;using DigitalKeyUnitCommands;using InABox.Rpc;using Microsoft.Xaml.Behaviors.Core;using InABox.Core;using System.Timers;using System.Windows.Media;using InABox.WPF;namespace PRSDigitalKeyUnit;public class MainWindowViewModel : INotifyPropertyChanged{    private bool _isConnected;    public bool Ch1Active { get; set; }    public bool Ch2Active { get; set; }    public bool Ch3Active { get; set; }    public bool Ch4Active { get; set; }    public bool Ch5Active { get; set; }    public bool Ch6Active { get; set; }        public System.Timers.Timer Ch1Timer { get; set; }    public System.Timers.Timer Ch2Timer { get; set; }    public System.Timers.Timer Ch3Timer { get; set; }    public System.Timers.Timer Ch4Timer { get; set; }    public System.Timers.Timer Ch5Timer { get; set; }    public System.Timers.Timer Ch6Timer { get; set; }    public bool IsConnected    {        get => _isConnected;        set        {            _isConnected = value;            ToggleLEDElement();            OnPropertyChanged(nameof(LEDElementVisible));        }    }    public string LEDElementVisible { get; set; } = "Hidden";        public string Name { get; set; }    public string Warning { get; set; }    public string Contact { get; set; }    public Guid ID { get; set; }        private RpcServerPipeTransport Transport;    public MainWindowViewModel()    {        Transport = new RpcServerPipeTransport("uhhhh");        Transport.AddHandler<MainWindowViewModel, ActivateCommand, ActivateParameters, ActivateResult>(new ActivateHandler(this));         Transport.AddHandler<MainWindowViewModel, ConfigureCommand, ConfigureParameters, ConfigureResult>(new ConfigureHandler(this));        Transport.OnOpen += TransportOnOnOpen;        Transport.OnClose += TransportOnOnClose;        Transport.Start();    }    private void TransportOnOnClose(IRpcTransport transport, RpcTransportCloseArgs e)    {        IsConnected = false;    }    private void TransportOnOnOpen(IRpcTransport transport, RpcTransportOpenArgs e)    {        IsConnected = true;    }    public void ToggleLEDElement()    {        if (IsConnected) LEDElementVisible = "Visible";        else LEDElementVisible = "Hidden";    }        public void Ch1TimerRanOut(Object source, ElapsedEventArgs e) { Ch1Active = false; }    public void Ch2TimerRanOut(Object source, ElapsedEventArgs e) { Ch2Active = false; }    public void Ch3TimerRanOut(Object source, ElapsedEventArgs e) { Ch3Active = false; }    public void Ch4TimerRanOut(Object source, ElapsedEventArgs e) { Ch4Active = false; }    public void Ch5TimerRanOut(Object source, ElapsedEventArgs e) { Ch5Active = false; }    public void Ch6TimerRanOut(Object source, ElapsedEventArgs e) { Ch6Active = false; }        public event PropertyChangedEventHandler? PropertyChanged;    protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)    {        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));    }    protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)    {        if (EqualityComparer<T>.Default.Equals(field, value)) return false;        field = value;        OnPropertyChanged(propertyName);        return true;    }}public class ActivateHandler : RpcCommandHandler<MainWindowViewModel, ActivateCommand, ActivateParameters, ActivateResult>{    public ActivateHandler(MainWindowViewModel sender) : base(sender)    {    }        protected override ActivateResult Execute(IRpcSession session, ActivateParameters parameters, Logger logger)    {        long temp = parameters.Relay1;        if (temp < 0) Sender.Ch1Active = false;        else if (temp == 0)        {            Sender.Ch1Active = true;            Sender.Ch1Timer.Stop();        }        else        {            Sender.Ch1Timer = new System.Timers.Timer(temp);            Sender.Ch1Timer.Elapsed += Sender.Ch1TimerRanOut;        }                temp = parameters.Relay2;        if (temp < 0) Sender.Ch2Active = false;        else if (temp == 0)        {            Sender.Ch2Active = true;            Sender.Ch2Timer.Stop();        }        else        {            Sender.Ch2Timer = new System.Timers.Timer(temp);            Sender.Ch2Timer.Elapsed += Sender.Ch2TimerRanOut;        }                temp = parameters.Relay3;        if (temp < 0) Sender.Ch3Active = false;        else if (temp == 0)        {            Sender.Ch3Active = true;            Sender.Ch3Timer.Stop();        }        else        {            Sender.Ch3Timer = new System.Timers.Timer(temp);            Sender.Ch3Timer.Elapsed += Sender.Ch3TimerRanOut;        }                temp = parameters.Relay4;        if (temp < 0) Sender.Ch4Active = false;        else if (temp == 0)        {            Sender.Ch4Active = true;            Sender.Ch4Timer.Stop();        }        else        {            Sender.Ch4Timer = new System.Timers.Timer(temp);            Sender.Ch4Timer.Elapsed += Sender.Ch4TimerRanOut;        }                temp = parameters.Relay5;        if (temp < 0) Sender.Ch5Active = false;        else if (temp == 0)        {            Sender.Ch5Active = true;            Sender.Ch5Timer.Stop();        }        else        {            Sender.Ch5Timer = new System.Timers.Timer(temp);            Sender.Ch5Timer.Elapsed += Sender.Ch5TimerRanOut;        }                temp = parameters.Relay6;        if (temp < 0) Sender.Ch6Active = false;        else if (temp == 0)        {            Sender.Ch6Active = true;            Sender.Ch6Timer.Stop();        }        else        {            Sender.Ch6Timer = new System.Timers.Timer(temp);            Sender.Ch6Timer.Elapsed += Sender.Ch6TimerRanOut;        }        var result = new ActivateResult();        result.Relay1 = parameters.Relay1;        result.Relay2 = parameters.Relay2;        result.Relay3 = parameters.Relay3;        result.Relay4 = parameters.Relay4;        result.Relay5 = parameters.Relay5;        result.Relay6 = parameters.Relay6;        return result;    }}public class ConfigureHandler : RpcCommandHandler<MainWindowViewModel, ConfigureCommand, ConfigureParameters, ConfigureResult>{    public ConfigureHandler(MainWindowViewModel sender) : base(sender)    {    }    protected override ConfigureResult Execute(IRpcSession session, ConfigureParameters parameters, Logger logger)    {        Sender.Name = parameters.Name;        Sender.Contact = parameters.Contact;        Sender.Warning = parameters.Warning;        Sender.ID = parameters.ID;                var result = new ConfigureResult();        result.Name = parameters.Name;        return result;    }}
 |