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;
- }
- }
|