in src/Azure.IIoT.OpcUa.Publisher.Testing/src/Asset/SimulatedAsset.cs [115:266]
public ServiceResult Read(ref object? value)
{
var dataType = Tag.Form.GetDataTypeId();
if (NodeId.IsNull(dataType))
{
return ServiceResult.Create(StatusCodes.BadDataTypeIdUnknown, "Bad payload");
}
if (Tag.Form.IsArray)
{
value = dataType.Identifier switch
{
Opc.Ua.DataTypes.Boolean => _generator.GetRandomArray<bool>(),
Opc.Ua.DataTypes.SByte => _generator.GetRandomArray<sbyte>(),
Opc.Ua.DataTypes.Byte => _generator.GetRandomArray<byte>(),
Opc.Ua.DataTypes.Int16 => _generator.GetRandomArray<short>(),
Opc.Ua.DataTypes.UInt16 => _generator.GetRandomArray<ushort>(),
Opc.Ua.DataTypes.Int32 => _generator.GetRandomArray<int>(),
Opc.Ua.DataTypes.UInt32 => _generator.GetRandomArray<uint>(),
Opc.Ua.DataTypes.Int64 => _generator.GetRandomArray<long>(),
Opc.Ua.DataTypes.UInt64 => _generator.GetRandomArray<ulong>(),
Opc.Ua.DataTypes.Float => _generator.GetRandomArray<float>(),
Opc.Ua.DataTypes.Double => _generator.GetRandomArray<double>(),
Opc.Ua.DataTypes.String => _generator.GetRandomArray<string>(),
Opc.Ua.DataTypes.DateTime => _generator.GetRandomArray<DateTime>(),
Opc.Ua.DataTypes.Guid => _generator.GetRandomArray<Guid>(),
Opc.Ua.DataTypes.ByteString => _generator.GetRandomArray<byte[]>(),
Opc.Ua.DataTypes.XmlElement => _generator.GetRandomArray<XmlElement>(),
Opc.Ua.DataTypes.NodeId => _generator.GetRandomArray<NodeId>(),
Opc.Ua.DataTypes.ExpandedNodeId => _generator.GetRandomArray<ExpandedNodeId>(),
Opc.Ua.DataTypes.QualifiedName => _generator.GetRandomArray<QualifiedName>(),
Opc.Ua.DataTypes.LocalizedText => _generator.GetRandomArray<LocalizedText>(),
Opc.Ua.DataTypes.StatusCode => _generator.GetRandomArray<StatusCode>(),
Opc.Ua.DataTypes.BaseDataType => _generator.GetRandomArray<object>(),
Opc.Ua.DataTypes.Enumeration => _generator.GetRandomArray<int>(),
Opc.Ua.DataTypes.Number => _generator.GetRandomArray(BuiltInType.Number, 100, false),
Opc.Ua.DataTypes.Integer => _generator.GetRandomArray(BuiltInType.Integer, 100, false),
Opc.Ua.DataTypes.UInteger => _generator.GetRandomArray(BuiltInType.UInteger, 100, false),
Opc.Ua.DataTypes.Structure => GetRandomArray(),
_ => null
};
return ServiceResult.Good;
}
value = dataType.Identifier switch
{
Opc.Ua.DataTypes.Boolean => _generator.GetRandom<bool>(),
Opc.Ua.DataTypes.SByte => _generator.GetRandom<sbyte>(),
Opc.Ua.DataTypes.Byte => _generator.GetRandom<byte>(),
Opc.Ua.DataTypes.Int16 => _generator.GetRandom<short>(),
Opc.Ua.DataTypes.UInt16 => _generator.GetRandom<ushort>(),
Opc.Ua.DataTypes.Int32 => _generator.GetRandom<int>(),
Opc.Ua.DataTypes.UInt32 => _generator.GetRandom<uint>(),
Opc.Ua.DataTypes.Int64 => _generator.GetRandom<long>(),
Opc.Ua.DataTypes.UInt64 => _generator.GetRandom<ulong>(),
Opc.Ua.DataTypes.Float => _generator.GetRandom<float>(),
Opc.Ua.DataTypes.Double => _generator.GetRandom<double>(),
Opc.Ua.DataTypes.String => _generator.GetRandom<string>(),
Opc.Ua.DataTypes.DateTime => _generator.GetRandom<DateTime>(),
Opc.Ua.DataTypes.Guid => _generator.GetRandom<Guid>(),
Opc.Ua.DataTypes.ByteString => _generator.GetRandom<byte[]>(),
Opc.Ua.DataTypes.XmlElement => _generator.GetRandom<XmlElement>(),
Opc.Ua.DataTypes.NodeId => _generator.GetRandom<NodeId>(),
Opc.Ua.DataTypes.ExpandedNodeId => _generator.GetRandom<ExpandedNodeId>(),
Opc.Ua.DataTypes.QualifiedName => _generator.GetRandom<QualifiedName>(),
Opc.Ua.DataTypes.LocalizedText => _generator.GetRandom<LocalizedText>(),
Opc.Ua.DataTypes.StatusCode => _generator.GetRandom<StatusCode>(),
Opc.Ua.DataTypes.BaseDataType => _generator.GetRandomVariant().Value,
Opc.Ua.DataTypes.Structure => GetRandomStructure(),
Opc.Ua.DataTypes.Enumeration => _generator.GetRandom<int>(),
Opc.Ua.DataTypes.Number => _generator.GetRandom(BuiltInType.Number),
Opc.Ua.DataTypes.Integer => _generator.GetRandom(BuiltInType.Integer),
Opc.Ua.DataTypes.UInteger => _generator.GetRandom(BuiltInType.UInteger),
_ => null
};
return ServiceResult.Good;
ExtensionObject[]? GetRandomArray()
{
var values = _generator.GetRandomArray<ExtensionObject>(10);
for (var i = 0; values != null && i < values.Length; i++)
{
values[i] = GetRandomStructure();
}
return values;
}
ExtensionObject GetRandomStructure()
{
if (_generator.GetRandomBoolean())
{
var scalar = new ScalarValueDataType
{
BooleanValue = _generator.GetRandom<bool>(),
SByteValue = _generator.GetRandom<sbyte>(),
ByteValue = _generator.GetRandom<byte>(),
Int16Value = _generator.GetRandom<short>(),
UInt16Value = _generator.GetRandom<ushort>(),
Int32Value = _generator.GetRandom<int>(),
UInt32Value = _generator.GetRandom<uint>(),
Int64Value = _generator.GetRandom<long>(),
UInt64Value = _generator.GetRandom<ulong>(),
FloatValue = _generator.GetRandom<float>(),
DoubleValue = _generator.GetRandom<double>(),
StringValue = _generator.GetRandom<string>(),
DateTimeValue = _generator.GetRandom<DateTime>(),
GuidValue = _generator.GetRandom<Uuid>(),
ByteStringValue = _generator.GetRandom<byte[]>(),
XmlElementValue = _generator.GetRandom<XmlElement>(),
NodeIdValue = _generator.GetRandom<NodeId>(),
ExpandedNodeIdValue = _generator.GetRandom<ExpandedNodeId>(),
QualifiedNameValue = _generator.GetRandom<QualifiedName>(),
LocalizedTextValue = _generator.GetRandom<LocalizedText>(),
StatusCodeValue = _generator.GetRandom<StatusCode>(),
VariantValue = _generator.GetRandomVariant()
};
return new ExtensionObject(scalar);
}
var array = new ArrayValueDataType
{
BooleanValue = _generator.GetRandomArray<bool>(10),
SByteValue = _generator.GetRandomArray<sbyte>(10),
ByteValue = _generator.GetRandomArray<byte>(10),
Int16Value = _generator.GetRandomArray<short>(10),
UInt16Value = _generator.GetRandomArray<ushort>(10),
Int32Value = _generator.GetRandomArray<int>(10),
UInt32Value = _generator.GetRandomArray<uint>(10),
Int64Value = _generator.GetRandomArray<long>(10),
UInt64Value = _generator.GetRandomArray<ulong>(10),
FloatValue = _generator.GetRandomArray<float>(10),
DoubleValue = _generator.GetRandomArray<double>(10),
StringValue = _generator.GetRandomArray<string>(10),
DateTimeValue = _generator.GetRandomArray<DateTime>(10),
GuidValue = _generator.GetRandomArray<Uuid>(10),
ByteStringValue = _generator.GetRandomArray<byte[]>(10),
XmlElementValue = _generator.GetRandomArray<XmlElement>(10),
NodeIdValue = _generator.GetRandomArray<NodeId>(10),
ExpandedNodeIdValue = _generator.GetRandomArray<ExpandedNodeId>(10),
QualifiedNameValue = _generator.GetRandomArray<QualifiedName>(10),
LocalizedTextValue = _generator.GetRandomArray<LocalizedText>(10),
StatusCodeValue = _generator.GetRandomArray<StatusCode>(10)
};
var values = _generator.GetRandomArray<object>(10);
for (var i = 0; values != null && i < values.Length; i++)
{
array.VariantValue.Add(new Variant(values[i]));
}
return new ExtensionObject(array.TypeId, array);
}
}