private void ReadNodeIdBody(byte encodingByte, NodeId value)
{
switch ((NodeIdEncodingBits)(encodingByte & 0x3F))
{
case NodeIdEncodingBits.TwoByte:
{
value.SetNamespaceIndex(0);
value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadByte());
break;
}
case NodeIdEncodingBits.FourByte:
{
value.SetNamespaceIndex(m_reader.ReadByte());
value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadUInt16());
break;
}
case NodeIdEncodingBits.Numeric:
{
value.SetNamespaceIndex(m_reader.ReadUInt16());
value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadUInt32());
break;
}
case NodeIdEncodingBits.String:
{
value.SetNamespaceIndex(m_reader.ReadUInt16());
value.SetIdentifier(IdType.String, ReadString(null));
break;
}
case NodeIdEncodingBits.Guid:
{
value.SetNamespaceIndex(m_reader.ReadUInt16());
value.SetIdentifier(IdType.Guid, (Guid)ReadGuid(null));
break;
}
case NodeIdEncodingBits.ByteString:
{
value.SetNamespaceIndex(m_reader.ReadUInt16());
value.SetIdentifier(IdType.Opaque, ReadByteString(null));
break;
}
default:
{
throw new ServiceResultException(
StatusCodes.BadDecodingError,
Utils.Format("Invald encoding byte (0x{0:X2}) for NodeId.", encodingByte));
}
}
}