Fixed Issue 651.
3 This Source Code Form is subject to the terms of the Mozilla Public
4 License, v. 2.0. If a copy of the MPL was not distributed with this
5 file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 Copyright (C) 2009-2011 Michael Möller <mmoeller@openhardwaremonitor.org>
12 using OpenHardwareMonitor.Collections;
14 namespace OpenHardwareMonitor.Hardware {
15 internal abstract class Hardware : IHardware {
17 private readonly Identifier identifier;
18 protected readonly string name;
19 private string customName;
20 protected readonly ISettings settings;
21 protected readonly ListSet<ISensor> active = new ListSet<ISensor>();
23 public Hardware(string name, Identifier identifier, ISettings settings) {
24 this.settings = settings;
25 this.identifier = identifier;
27 this.customName = settings.GetValue(
28 new Identifier(Identifier, "name").ToString(), name);
31 public IHardware[] SubHardware {
32 get { return new IHardware[0]; }
35 public virtual IHardware Parent {
39 public virtual ISensor[] Sensors {
40 get { return active.ToArray(); }
43 protected virtual void ActivateSensor(ISensor sensor) {
44 if (active.Add(sensor))
45 if (SensorAdded != null)
49 protected virtual void DeactivateSensor(ISensor sensor) {
50 if (active.Remove(sensor))
51 if (SensorRemoved != null)
52 SensorRemoved(sensor);
60 if (!string.IsNullOrEmpty(value))
64 settings.SetValue(new Identifier(Identifier, "name").ToString(),
69 public Identifier Identifier {
75 #pragma warning disable 67
76 public event SensorEventHandler SensorAdded;
77 public event SensorEventHandler SensorRemoved;
78 #pragma warning restore 67
81 public abstract HardwareType HardwareType { get; }
83 public virtual string GetReport() {
87 public abstract void Update();
89 public event HardwareEventHandler Closing;
91 public virtual void Close() {
96 public void Accept(IVisitor visitor) {
98 throw new ArgumentNullException("visitor");
99 visitor.VisitHardware(this);
102 public virtual void Traverse(IVisitor visitor) {
103 foreach (ISensor sensor in active)
104 sensor.Accept(visitor);