using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.PMR.Power; namespace Tango.Integration.Operation { public class PowerDownHandler : ExtendedObject { private Task _abortTask; public event EventHandler StatusChanged; public event EventHandler Failed; public event EventHandler Completed; private StartPowerDownResponse _status; public StartPowerDownResponse Status { get { return _status; } set { _status = value; RaisePropertyChangedAuto(); } } internal PowerDownHandler(Task abortTask) { _abortTask = abortTask; Status = new StartPowerDownResponse() { Message = "Powering down...", State = PowerDownState.None, }; } internal void RaiseStatusChanged(StartPowerDownResponse status) { OnStatusChanged(status); } internal void RaiseFailed(Exception ex) { OnFailed(ex); } internal void RaiseCompleted() { OnCompleted(); } private void OnStatusChanged(StartPowerDownResponse status) { Status = status; StatusChanged?.Invoke(this, new PowerDownStatusChangedEventArgs() { Status = status }); } private void OnCompleted() { Completed?.Invoke(this, new EventArgs()); } private void OnFailed(Exception ex) { Failed?.Invoke(this, ex); } public async Task Abort() { _abortTask.Start(); await _abortTask; } } }