Exemple #1
0
        private void ReadValue(IConsumerBinding consumerBinding)
        {
            object _value = null;

            switch (consumerBinding.Encoding.BuiltInType)
            {
            case BuiltInType.Boolean:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadBoolean();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadBoolean, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.SByte:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadSByte();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadSByte, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Byte:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadByte();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadByte, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Int16:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadInt16();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadInt16, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.UInt16:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadUInt16();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadUInt16, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Int32:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadInt32();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadInt32, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.UInt32:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadUInt32();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadUInt32, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Int64:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadInt64();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadInt64, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.UInt64:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadUInt64();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadUInt64, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Float:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadSingle();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadSingle, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Double:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = ReadDouble();
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, ReadDouble, consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.String:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadString(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadString(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.DateTime:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadDateTime(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDateTime(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Guid:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadGuid(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadGuid(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.ByteString:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    m_UADecoder.ReadByteString(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadByteString(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.XmlElement:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadXmlElement(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadXmlElement(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.NodeId:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadNodeId(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadNodeId(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.ExpandedNodeId:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadExpandedNodeId(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExpandedNodeId(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.StatusCode:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadStatusCode(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadStatusCode(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.QualifiedName:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadQualifiedName(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadQualifiedName(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.LocalizedText:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadLocalizedText(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadLocalizedText(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.ExtensionObject:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadExtensionObject(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExtensionObject(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.DataValue:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadDataValue(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDataValue(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.Variant:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadVariant(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadVariant(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            case BuiltInType.DiagnosticInfo:
                if (consumerBinding.Encoding.ValueRank < 0)
                {
                    _value = m_UADecoder.ReadDiagnosticInfo(this);
                }
                else
                {
                    _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDiagnosticInfo(this), consumerBinding.Encoding.ValueRank > 1);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(string.Format("Impossible to convert the type {0}", consumerBinding.Encoding));
            }
            consumerBinding.Assign2Repository(_value);
        }