diff --git a/PlantBox.Shared/Communication/Commands/HistoricResponse.cs b/PlantBox.Shared/Communication/Commands/HistoricResponse.cs new file mode 100644 index 0000000..ed34fd1 --- /dev/null +++ b/PlantBox.Shared/Communication/Commands/HistoricResponse.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; + +namespace PlantBox.Shared.Communication.Commands +{ + public class HistoricResponse : CommandSerializable + { + public const char ValueSeparator = '/'; + + public override Command Command => Command.Historic; + + public TimeSpan Time { get; set; } + public double[] Humidities { get; set; } + public double[] Luminosities { get; set; } + public double[] Temperatures { get; set; } + + public HistoricResponse() + { + + } + public HistoricResponse(TimeSpan time, double[] humidities, double[] luminosities, double[] temperatures) + { + Time = time; + Humidities = humidities; + Luminosities = luminosities; + Temperatures = temperatures; + } + + public override HistoricResponse Deserialize(string[] arguments) + { + double[] GetArray(string argument) + { + return argument.Split(ValueSeparator).Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray(); + } + + if (arguments == null) + { + throw new ArgumentNullException(nameof(arguments)); + } + if (arguments.Length < 4) + { + throw new ArgumentException($"Excepted 4 arguments, got {arguments.Length}"); + } + + Time = TimeSpan.FromMinutes(double.Parse(arguments[0])); + Humidities = GetArray(arguments[1]); + Luminosities = GetArray(arguments[2]); + Temperatures = GetArray(arguments[3]); + + return this; + } + + public override string[] Serialize() + { + string Join(double[] values) + { + return string.Join(ValueSeparator.ToString(), values); + } + + return new[] + { + Time.TotalMinutes.ToString(CultureInfo.InvariantCulture), + Join(Humidities), + Join(Luminosities), + Join(Temperatures) + }; + } + } +}