internal static IAccessorValue createValueAccessor(IAdsConnection connection, SymbolLoaderSettings settings) { IAccessorValue value2 = null; AdsValueAccessor inner = null; IAccessorValueFactory valueFactory = null; if (settings.SymbolsLoadMode == SymbolsLoadMode.DynamicTree) { valueFactory = new DynamicValueFactory(settings.ValueCreation); inner = new AdsValueAccessor(connection, settings.ValueAccessMode, valueFactory, NotificationSettings.Default); value2 = new DynamicValueAccessor(inner, valueFactory, settings.ValueCreation); } else { valueFactory = new ValueFactory(settings.ValueCreation); inner = new AdsValueAccessor(connection, settings.ValueAccessMode, valueFactory, NotificationSettings.Default); value2 = inner; } IAccessorValueFactory2 factory2 = valueFactory as IAccessorValueFactory2; if (valueFactory != null) { factory2.SetValueAccessor(value2); } inner.AutomaticReconnection = settings.AutomaticReconnection; return(value2); }
public DynamicValueAccessor(IAccessorValue inner, IAccessorValueFactory factory, ValueCreationMode mode) : base(factory, ((ValueAccessor)inner).Connection) { this._mode = ValueCreationMode.Default; this._mode = mode; this._inner = inner; IAccessorNotification notification = inner as IAccessorNotification; if (notification != null) { base._notificationSettings = notification.DefaultNotificationSettings; } }
protected virtual object OnReadValue(int timeout) { DateTime time; if (!this.HasValue) { throw new CannotAccessVirtualSymbolException(this); } IAccessorValue valueAccessor = (IAccessorValue)this.ValueAccessor; IAccessorConnection connection = valueAccessor as IAccessorConnection; if ((timeout >= 0) && (connection != null)) { using (new AdsTimeoutSetter(connection.Connection, timeout)) { return(valueAccessor.ReadValue(this, out time)); } } return(valueAccessor.ReadValue(this, out time)); }
protected virtual void OnWriteValue(object value, int timeout) { DateTime time; if (!this.HasValue) { throw new CannotAccessVirtualSymbolException(this); } IAccessorValue valueAccessor = (IAccessorValue)this.ValueAccessor; IAccessorConnection connection = valueAccessor as IAccessorConnection; if ((timeout >= 0) && (connection != null)) { using (new AdsTimeoutSetter(connection.Connection, timeout)) { valueAccessor.WriteValue(this, value, out time); return; } } valueAccessor.WriteValue(this, value, out time); }