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) { return await _client.GetData>($"{address}api/RTDDA"); } /// /// 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 void PostNames(string address, SortedList data) { _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)); } //Value Types /// /// Get Value Types settings /// /// Base device address (http://1.2.3.4) /// Deserialized Value Types from API public async Task> GetValueTypes(string address) { try { return await _client.GetData>($"{address}api/RTDDA/ValueTypes"); } catch { return new(); } } /// /// Post Value Types data to API /// /// Base device address (http://1.2.3.4) /// Data object for Post to API public async void PostValueTypes(string address, SortedList data) { await Task.Run(() => _client.PostData>($"{address}api/RTDDA/ValueTypes", 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); } } } }