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); }
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); }
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); }