/// <summary>Читает значение свойства из хранилища</summary> /// <param name="Index">Номер свойства</param> /// <returns>Прочитанное значение</returns> public StoredValue Read(int Index) { Thread.Sleep(50); StoredValue value; int intValue; if (_storage.TryGetValue(Index, out intValue)) value = new StoredValue(intValue); else value = StoredValue.UnsetValue; OnStorageRead(new StorageReadEventArgs(Index, value)); return value; }
private static int GetStorageIntValue(StoredValue Value) { switch (Value.Error) { case StoredValueErrorKind.NoError: Debug.Assert(Value.ValueA != null, "Для хранимого значения было указано состояние NoError, однако значение было равно null"); return (int)Value.ValueA; default: return 0; } }
/// <summary>Обновляет значение всех присоединённых свойств</summary> /// <param name="NewValue">Новое значение ячейки памяти</param> public void UpdateValue(StoredValue NewValue) { Value = NewValue; foreach (PropertyModel property in AttachedProperties.Where(p => p.Placement != null && p.Encoder != null)) { var val = new StoredPropertyValueModel( NewValue.ValueA != null ? property.Encoder.Decode(property.Placement.Eject((int)NewValue.ValueA)) : null, NewValue.ValueB != null ? property.Encoder.Decode(property.Placement.Eject((int)NewValue.ValueB)) : null, NewValue.Error); property.CurrentValue = val; } }
/// <summary>Инициализирует новый экземпляр класса <see cref="T:System.EventArgs" />.</summary> public StorageReadEventArgs(int Index, StoredValue ReadValue) { this.Index = Index; this.ReadValue = ReadValue; }
public void UpdateStorageCurrentValue(int StorageIndex, StoredValue Value) { if (Stores.ContainsKey(StorageIndex)) Stores[StorageIndex].UpdateValue(Value); else if (Value.Error != StoredValueErrorKind.Unset && Value.Error != StoredValueErrorKind.Unknown) { PropertyModel property = SystemProperties.SystemStores.ContainsKey(StorageIndex) ? SystemProperties.SystemStores[StorageIndex].GetPropertyModel() : new PropertyModel(-1, string.Format("Неизвестное свойство {0}", StorageIndex), "Неизвестные свойства", PropertyEncoding.GetEncoder<Int32>(), new PropertyPlacement(StorageIndex), 100); Properties.Add(property); var storage = new StorageModel(StorageIndex, property); Stores.Add(StorageIndex, storage); storage.UpdateValue(Value); OnNewPropertyAdded(new PropertyAddedEventArgs(property)); // Нужно придумать, что сделать в случае, если такое свойство не загружено // Нельзя его игнорировать // Но в то же время, нельзя искать просто это свойство по базе, // т.к. на другом оборудовании в этой ячейке может находиться другое свойство } }
private void OnStorageRead(int Index, StoredValue v) { if (StorageRead != null) StorageRead(this, new StorageReadEventArgs(Index, v)); }