in src/Azure.IIoT.OpcUa/src/Encoders/PubSub/UadpDataSetMessage.cs [694:798]
private static void WriteFieldAsRawData(BinaryEncoder binaryEncoder, Variant variant,
PublishedFieldMetaDataModel? fieldMetaData)
{
var builtInType = (BuiltInType?)fieldMetaData?.BuiltInType
?? variant.TypeInfo?.BuiltInType ?? BuiltInType.Null;
var valueRank = fieldMetaData?.ValueRank
?? variant.TypeInfo?.ValueRank ?? 0;
if (builtInType == BuiltInType.Null)
{
return;
}
var valueToEncode = variant.Value;
if (valueRank == ValueRanks.Scalar)
{
switch (builtInType)
{
case BuiltInType.Boolean:
binaryEncoder.WriteBoolean(null,
Convert.ToBoolean(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.SByte:
binaryEncoder.WriteSByte(null,
Convert.ToSByte(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Byte:
binaryEncoder.WriteByte(null,
Convert.ToByte(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Int16:
binaryEncoder.WriteInt16(null,
Convert.ToInt16(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.UInt16:
binaryEncoder.WriteUInt16(null,
Convert.ToUInt16(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Int32:
binaryEncoder.WriteInt32(null,
Convert.ToInt32(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.UInt32:
binaryEncoder.WriteUInt32(null,
Convert.ToUInt32(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Int64:
binaryEncoder.WriteInt64(null,
Convert.ToInt64(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.UInt64:
binaryEncoder.WriteUInt64(null,
Convert.ToUInt64(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Float:
binaryEncoder.WriteFloat(null,
Convert.ToSingle(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Double:
binaryEncoder.WriteDouble(null,
Convert.ToDouble(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.DateTime:
binaryEncoder.WriteDateTime(null,
Convert.ToDateTime(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Enumeration:
binaryEncoder.WriteInt32(null,
Convert.ToInt32(valueToEncode, CultureInfo.InvariantCulture));
break;
case BuiltInType.Guid:
binaryEncoder.WriteGuid(null, (Uuid)valueToEncode);
break;
case BuiltInType.String:
binaryEncoder.WriteString(null, valueToEncode as string);
break;
case BuiltInType.ByteString:
binaryEncoder.WriteByteString(null, (byte[])valueToEncode);
break;
case BuiltInType.QualifiedName:
binaryEncoder.WriteQualifiedName(null, valueToEncode as QualifiedName);
break;
case BuiltInType.LocalizedText:
binaryEncoder.WriteLocalizedText(null, valueToEncode as LocalizedText);
break;
case BuiltInType.NodeId:
binaryEncoder.WriteNodeId(null, valueToEncode as NodeId);
break;
case BuiltInType.ExpandedNodeId:
binaryEncoder.WriteExpandedNodeId(null, valueToEncode as ExpandedNodeId);
break;
case BuiltInType.StatusCode:
binaryEncoder.WriteStatusCode(null, (StatusCode)valueToEncode);
break;
case BuiltInType.XmlElement:
binaryEncoder.WriteXmlElement(null, valueToEncode as XmlElement);
break;
case BuiltInType.ExtensionObject:
binaryEncoder.WriteExtensionObject(null, valueToEncode as ExtensionObject);
break;
}
}
else if (valueRank >= ValueRanks.OneDimension)
{
binaryEncoder.WriteArray(null, valueToEncode, valueRank, builtInType);
}
}