using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wrapper_Api_SequentMicrosystems.Main;
namespace Wrapper_Api_SequentMicrosystems.RTD8TM
{
public class RTD8TM
{
private ApiClient _client;
public RTD8TM()
{
_client = new ApiClient();
}
#region Communication
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
//RTD
///
/// Get data from configured cards
///
/// Base device address (http://1.2.3.4)
/// Deserialized data from API
public async Task> Get(string address)
{
//try
//{
return await _client.GetData>($"{address}api/RTDDA");
//}
//catch (Exception ex)
//{
// throw new Exception(ex.Message);
//}
}
///
/// Get data from all cards
///
/// Base device address (http://1.2.3.4)
/// Deserialized data from API
public async Task> GetAll(string address)
{
try
{
return await _client.GetData>($"{address}api/RTDDA/All");
}
catch //(Exception ex)
{
return new();
}
}
///
/// Get data from Selected card
///
/// Base device address (http://1.2.3.4)
/// Stack ID
/// Deserialized data from API
public async Task GetStack(string address, byte stack)
{
if (stack > 7)
return new float[0];
if (stack < 0)
return new float[0];
try
{
return await _client.GetData($"{address}api/RTDDA/{stack}");
}
catch //(Exception ex)
{
return new float[0];
}
}
//Names
///
/// Get configured chanels names
///
/// Base device address (http://1.2.3.4)
/// Deserialized data from API
public async Task> GetNames(string address)
{
try
{
return await _client.GetData>($"{address}api/RTDDA/Names");
}
catch
{
return new();
}
}
///
/// Post chanels names configuration
///
/// Base device address (http://1.2.3.4)
/// Data object with data for Post to API
public async void PostNames(string address, SortedList data)
{
await Task.Run(() => _client.PostData>($"{address}api/RTDDA/Names", data));
}
//Preconfigured Names
///
/// Get prepared chanels names list
///
/// Base device address (http://1.2.3.4)
/// Deserialized object from API
public async Task> GetPreconfNames(string address)
{
try
{
return await _client.GetData>($"{address}api/RTDDA/Names/Preconfigured");
}
catch
{
return new();
}
}
///
/// Post preconfigured chanels names to API
///
/// Base device address (http://1.2.3.4)
/// Data object to Post to API
public async void PostPreconfNames(string address, List data)
{
await Task.Run(() => _client.PostData>($"{address}api/RTDDA/Names/Preconfigured", data));
}
// Calibration
///
/// Get Calibration settings
///
/// Base device address (http://1.2.3.4)
/// Deserialized Calibration data from API
public async Task> GetCalibration(string address)
{
try
{
return await _client.GetData>($"{address}api/RTDDA/Calibration");
}
catch
{
return new();
}
}
///
/// Post calibration data to API
///
/// Base device address (http://1.2.3.4)
/// Data object for Post to API
public async void PostCalibration(string address, SortedList data)
{
await Task.Run(() => _client.PostData>($"{address}api/RTDDA/Calibration", data));
}
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
#endregion
///
/// Create data objects list from sortedlists with datas and names
///
/// Data
/// Names
/// Device address
/// List with data objects
public List GetDataList(SortedList data, SortedList names, string address)
{
List objects = new List();
foreach (byte stack in data.Keys)
{
for (byte rtd = 0; rtd < 8; rtd++)
{
if (!names.ContainsKey(stack) || names[stack].Length < rtd)
{
RTD8TMDataModel model = new(data[stack][rtd], "", (byte)(rtd + 1), stack, address);
objects.Add(model);
}
else
{
RTD8TMDataModel model = new(data[stack][rtd], names[stack][rtd], (byte)(rtd + 1), stack, address);
objects.Add(model);
}
}
}
return objects;
}
///
/// Get data objects list by device address
///
/// Base device address (http://1.2.3.4)
/// true -> read from all cards | false -> read from configured cards
/// List with data objects
public async Task> GetDataList(string address, bool all)
{
if (all)
{
return GetDataList(await GetAll(address), await GetNames(address), address);
}
else
{
return GetDataList(await Get(address), await GetNames(address), address);
}
}
}
}