Exemple #1
0
        /// <summary>
        /// Convert to results
        /// </summary>
        /// <param name="codec"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static HistoricValueModel[] DecodeValues(this IVariantEncoder codec, VariantValue result)
        {
            var extensionObject = codec.DecodeExtensionObject(result);

            if (extensionObject?.Body is HistoryData data)
            {
                var results = data.DataValues.Select(d => new HistoricValueModel {
                    ServerPicoseconds = d.ServerPicoseconds.ToNullable((ushort)0),
                    SourcePicoseconds = d.SourcePicoseconds.ToNullable((ushort)0),
                    ServerTimestamp   = d.ServerTimestamp.ToNullable(DateTime.MinValue),
                    SourceTimestamp   = d.SourceTimestamp.ToNullable(DateTime.MinValue),
                    StatusCode        = d.StatusCode.ToNullable(StatusCodes.Good)?.CodeBits,
                    Value             = d.WrappedValue == Variant.Null ? null : codec.Encode(d.WrappedValue)
                }).ToArray();
                if (extensionObject?.Body is HistoryModifiedData modified)
                {
                    if (modified.ModificationInfos.Count != data.DataValues.Count)
                    {
                        throw new FormatException("Modification infos and data value count is not the same");
                    }
                    for (var i = 0; i < modified.ModificationInfos.Count; i++)
                    {
                        results[i].ModificationInfo = new ModificationInfoModel {
                            ModificationTime =
                                modified.ModificationInfos[i].ModificationTime.ToNullable(DateTime.MinValue),
                            UserName =
                                modified.ModificationInfos[i].UserName
                        };
                    }
                }
                return(results);
            }
            return(null);
        }
        /// <summary>
        /// Convert to results
        /// </summary>
        /// <param name="codec"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static HistoricEventModel[] DecodeEvents(this IVariantEncoder codec, JToken result)
        {
            var extensionObject = codec.DecodeExtensionObject(result);

            if (extensionObject?.Body is HistoryEvent ev)
            {
                return(ev.Events.Select(d => new HistoricEventModel {
                    EventFields = d.EventFields
                                  .Select(v => v == Variant.Null ? null : codec.Encode(v))
                                  .ToList()
                }).ToArray());
            }
            return(null);
        }