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