Пример #1
0
 /// <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;
 }
Пример #2
0
        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;
            }
        }
Пример #3
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;
     }
 }
Пример #4
0
 /// <summary>Инициализирует новый экземпляр класса <see cref="T:System.EventArgs" />.</summary>
 public StorageReadEventArgs(int Index, StoredValue ReadValue)
 {
     this.Index = Index;
     this.ReadValue = ReadValue;
 }
Пример #5
0
        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));

                // Нужно придумать, что сделать в случае, если такое свойство не загружено
                // Нельзя его игнорировать
                // Но в то же время, нельзя искать просто это свойство по базе,
                // т.к. на другом оборудовании в этой ячейке может находиться другое свойство
            }
        }
Пример #6
0
 private void OnStorageRead(int Index, StoredValue v)
 {
     if (StorageRead != null)
         StorageRead(this, new StorageReadEventArgs(Index, v));
 }