internal override bool TryDecode()

in src/Azure.IIoT.OpcUa/src/Encoders/PubSub/MonitoredItemMessage.cs [208:331]


        internal override bool TryDecode(JsonDecoderEx decoder, string? property, ref bool withHeader,
            ref string? publisherId)
        {
            // If reading from property return false as this means we are a standard dataset message
            if (property != null)
            {
                return false;
            }

            var value = decoder.ReadDataValue(nameof(Value));
            DataSetFieldContentFlags dataSetFieldContentMask = 0u;
            if (value != null)
            {
                if (value.ServerTimestamp != DateTime.MinValue)
                {
                    dataSetFieldContentMask |= DataSetFieldContentFlags.ServerTimestamp;
                }
                if (value.ServerPicoseconds != 0)
                {
                    dataSetFieldContentMask |= DataSetFieldContentFlags.ServerPicoSeconds;
                }
                if (value.SourceTimestamp != DateTime.MinValue)
                {
                    dataSetFieldContentMask |= DataSetFieldContentFlags.SourceTimestamp;
                }
                if (value.SourcePicoseconds != 0)
                {
                    dataSetFieldContentMask |= DataSetFieldContentFlags.SourcePicoSeconds;
                }
                if (value.StatusCode != 0)
                {
                    dataSetFieldContentMask |= DataSetFieldContentFlags.StatusCode;
                }
            }

            // Read header
            DataSetMessageContentMask = 0u;
            var displayName = decoder.ReadString(nameof(DisplayName));
            if (displayName != null)
            {
                dataSetFieldContentMask |= DataSetFieldContentFlags.DisplayName;
            }
            NodeId = decoder.ReadString(nameof(NodeId));
            if (NodeId != null)
            {
                dataSetFieldContentMask |= DataSetFieldContentFlags.NodeId;
            }
            EndpointUrl = decoder.ReadString(nameof(EndpointUrl));
            if (EndpointUrl != null)
            {
                dataSetFieldContentMask |= DataSetFieldContentFlags.EndpointUrl;
            }
            ApplicationUri = decoder.ReadString(nameof(ApplicationUri));
            if (ApplicationUri != null)
            {
                dataSetFieldContentMask |= DataSetFieldContentFlags.ApplicationUri;
            }
            var timestamp = decoder.ReadDateTime(nameof(Timestamp));
            if (timestamp != DateTime.MinValue)
            {
                Timestamp = timestamp;
                DataSetMessageContentMask |= DataSetMessageContentFlags.Timestamp;
            }
            var status = decoder.ReadString(nameof(Status));
            if (status != null)
            {
                if (TypeMaps.StatusCodes.Value.TryGetIdentifier(status, out var statusCode))
                {
                    Status = statusCode;
                }
                else
                {
                    Status = status == "Good" ? Opc.Ua.StatusCodes.Good : Opc.Ua.StatusCodes.Bad;
                }
            }
            SequenceNumber = decoder.ReadUInt32(nameof(SequenceNumber));
            if (SequenceNumber != 0)
            {
                DataSetMessageContentMask |= DataSetMessageContentFlags.SequenceNumber;
            }
            var stringDictionary = decoder.ReadStringDictionary(nameof(ExtensionFields));
            if (stringDictionary?.Count > 0)
            {
                dataSetFieldContentMask |= DataSetFieldContentFlags.ExtensionFields;
                var extensionFields = new List<ExtensionFieldModel>();
                foreach (var (name, v) in stringDictionary)
                {
                    if (name == nameof(DataSetWriterId))
                    {
                        DataSetWriterName = v;
                    }
                    else if (name == nameof(JsonNetworkMessage.PublisherId))
                    {
                        publisherId = v;
                    }
                    else if (name == nameof(WriterGroupId))
                    {
                        WriterGroupId = v;
                    }
                    else
                    {
                        extensionFields.Add(new ExtensionFieldModel
                        {
                            DataSetFieldName = name,
                            Value = v
                        });
                    }
                }
                ExtensionFields = extensionFields;
            }
            else
            {
                ExtensionFields = null;
            }

            withHeader |= DataSetMessageContentMask != 0;
            if (value != null || dataSetFieldContentMask != 0)
            {
                Payload = Payload.Add(displayName ?? string.Empty, value, dataSetFieldContentMask);
                return true;
            }
            // Only return true if we otherwise read a header value
            return withHeader;
        }