using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.DI; using Tango.FSE.Common.Connection; using Tango.FSE.Common.SystemInfo; using Tango.PPC.Shared.Information; namespace Tango.FSE.UI.SystemInfo { /// /// Represents the default implementation. /// /// /// public class DefaultSystemInfoProvider : ExtendedObject, ISystemInfoProvider { private InformationPackage _package; private IMachineProvider MachineProvider { get; set; } private int _totalDyeMeters; /// /// Gets the machine total dye meters. /// public int TotalDyeMeters { get { return _totalDyeMeters; } set { _totalDyeMeters = value; RaisePropertyChangedAuto(); } } private TimeSpan _totalDyeTime; /// /// Gets the machine total dye time. /// public TimeSpan TotalDyeTime { get { return _totalDyeTime; } set { _totalDyeTime = value; RaisePropertyChangedAuto(); } } /// /// Initializes a new instance of the class. /// /// The machine provider. public DefaultSystemInfoProvider(IMachineProvider machineProvider) { MachineProvider = machineProvider; MachineProvider.MachineConnected += MachineProvider_MachineConnected; MachineProvider.MachineDisconnected += MachineProvider_MachineDisconnected; } /// /// Gets the system information package from the remote machine. /// /// public async Task GetSystemInformationPackage() { try { LogManager.Log("Retrieving remote machine PPC system information..."); if (_package == null) { var response = await MachineProvider.MachineOperator.SendGenericRequest(new GetMachineInformationRequest(), new Transport.TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(120) }); _package = response.Package; return _package; } else { return _package; } } catch (Exception ex) { throw LogManager.Log(ex, "Error retrieving remote machine PPC system information."); } } private async void MachineProvider_MachineConnected(object sender, MachineConnectedEventArgs e) { if (MachineProvider.ConnectionType.IsRemote()) { try { TotalDyeMeters = 0; TotalDyeTime = TimeSpan.Zero; LogManager.Log("Retrieving remote machine counters..."); var response = await MachineProvider.MachineOperator.SendGenericRequest(new GetMachineCountersRequest(), new Transport.TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(10) }); TotalDyeMeters = response.TotalDyeMeters; TotalDyeTime = response.TotalDyeTime; } catch (Exception ex) { throw LogManager.Log(ex, "Error retrieving remote machine counters."); } } } private void MachineProvider_MachineDisconnected(object sender, MachineDisconnectedEventArgs e) { _package = null; TotalDyeMeters = 0; TotalDyeTime = TimeSpan.Zero; } } }