コード例 #1
0
        public virtual object CreateValue(ISymbol symbol, byte[] rawData, int offset, DateTime utcTime)
        {
            object          untypedValue = null;
            IDataType       dataType     = symbol.DataType;
            IResolvableType type2        = symbol.DataType as IResolvableType;

            if (type2 != null)
            {
                dataType = type2.ResolveType(DataTypeResolveStrategy.AliasReference);
            }
            if (!dataType.IsPrimitive)
            {
                untypedValue = rawData;
            }
            else if ((symbol.Category == DataTypeCategory.Enum) && ((this.mode & ValueCreationMode.Enums) > ValueCreationMode.None))
            {
                untypedValue = EnumValueFactory.Create((IEnumType)dataType, rawData, offset);
            }
            else if ((this.mode & ValueCreationMode.Default) <= ValueCreationMode.None)
            {
                Module.Trace.TraceWarning("Value mode not supported!");
                untypedValue = rawData;
            }
            else
            {
                this.valueConverter.Unmarshal(symbol, rawData, 0, out untypedValue);
                if (((this.mode & ValueCreationMode.PlcOpenTypes) == ValueCreationMode.None) && (untypedValue is IPlcOpenType))
                {
                    untypedValue = ((IPlcOpenType)untypedValue).UntypedValue;
                }
            }
            return(untypedValue);
        }
コード例 #2
0
        public override object CreateValue(ISymbol symbol, byte[] rawData, int offset, IValue parent)
        {
            object          obj2     = null;
            IDataType       dataType = symbol.DataType;
            IResolvableType type2    = symbol.DataType as IResolvableType;

            if (type2 != null)
            {
                dataType = type2.ResolveType(DataTypeResolveStrategy.AliasReference);
            }
            if (base.mode.HasFlag(ValueCreationMode.FullDynamics) || !dataType.IsPrimitive)
            {
                if (!symbol.IsReference)
                {
                    obj2 = !symbol.IsPointer ? new DynamicValue((IDynamicSymbol)symbol, rawData, offset, (DynamicValue)parent) : new DynamicPointerValue((IDynamicSymbol)symbol, rawData, offset, (DynamicValue)parent);
                }
                else
                {
                    byte[]   buffer;
                    DateTime time;
                    IAccessorDynamicValue accessor = base.accessor as IAccessorDynamicValue;
                    if ((accessor != null) && (accessor.TryReadValue(symbol, out buffer, out time) == 0))
                    {
                        obj2 = new DynamicReferenceValue((IDynamicSymbol)symbol, buffer, 0, (DynamicValue)parent);
                    }
                }
            }
            else if ((dataType.Category == DataTypeCategory.Enum) && base.mode.HasFlag(ValueCreationMode.Enums))
            {
                obj2 = EnumValueFactory.Create((IEnumType)dataType, rawData, offset);
            }
            else if (base.mode.HasFlag(ValueCreationMode.Default))
            {
                base.valueConverter.Unmarshal(symbol, rawData, offset, out obj2);
            }
            else
            {
                obj2 = new DynamicValue((IDynamicSymbol)symbol, rawData, offset, (DynamicValue)parent);
            }
            return(obj2);
        }
コード例 #3
0
        public override object CreateValue(ISymbol symbol, byte[] rawData, int offset, DateTime utcReadTime)
        {
            object          untypedValue;
            IDataType       dataType = symbol.DataType;
            IResolvableType type2    = symbol.DataType as IResolvableType;

            if (type2 != null)
            {
                dataType = type2.ResolveType(DataTypeResolveStrategy.AliasReference);
            }
            if (base.mode.HasFlag(ValueCreationMode.FullDynamics))
            {
                if (symbol.IsPointer)
                {
                    base.valueConverter.Unmarshal(symbol, rawData, offset, out untypedValue);
                }
                else
                {
                    untypedValue = !symbol.IsReference ? (!symbol.IsPointer ? new DynamicValue((IDynamicSymbol)symbol, rawData, offset, utcReadTime, this) : new DynamicPointerValue((IDynamicSymbol)symbol, rawData, 0, utcReadTime, this)) : new DynamicReferenceValue((IDynamicSymbol)symbol, rawData, 0, utcReadTime, this);
                }
            }
            else if (dataType.IsPrimitive)
            {
                if ((dataType.Category == DataTypeCategory.Enum) && base.mode.HasFlag(ValueCreationMode.Enums))
                {
                    untypedValue = EnumValueFactory.Create((IEnumType)dataType, rawData, offset);
                }
                else if (!base.mode.HasFlag(ValueCreationMode.Default))
                {
                    untypedValue = new DynamicValue((IDynamicSymbol)symbol, rawData, offset, utcReadTime, this);
                }
                else
                {
                    base.valueConverter.Unmarshal(symbol, rawData, offset, out untypedValue);
                    if (((base.mode & ValueCreationMode.PlcOpenTypes) == ValueCreationMode.None) && (untypedValue is IPlcOpenType))
                    {
                        untypedValue = ((IPlcOpenType)untypedValue).UntypedValue;
                    }
                }
            }
            else if (((dataType.Category != DataTypeCategory.Array) || !base.mode.HasFlag(ValueCreationMode.Default)) || base.mode.HasFlag(ValueCreationMode.Enums))
            {
                untypedValue = !symbol.IsReference ? (!symbol.IsPointer ? new DynamicValue((IDynamicSymbol)symbol, rawData, offset, utcReadTime, this) : new DynamicPointerValue((IDynamicSymbol)symbol, rawData, 0, utcReadTime, this)) : new DynamicReferenceValue((IDynamicSymbol)symbol, rawData, 0, utcReadTime, this);
            }
            else
            {
                IDataType       elementType = ((IArrayType)dataType).ElementType;
                IResolvableType type5       = elementType as IResolvableType;
                if (type5 != null)
                {
                    elementType = type5.ResolveType(DataTypeResolveStrategy.AliasReference);
                }
                if (!base.mode.HasFlag(ValueCreationMode.Default) || !elementType.IsPrimitive)
                {
                    untypedValue = new DynamicValue((IDynamicSymbol)symbol, rawData, offset, utcReadTime, this);
                }
                else
                {
                    untypedValue = this.createPrimitiveValueArray((IArrayInstance)symbol, rawData, offset, utcReadTime);
                }
            }
            return(untypedValue);
        }