first commit

This commit is contained in:
2025-04-07 07:44:27 -07:00
commit d6cde0c05e
512 changed files with 142392 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors.
// Partial Copyright (C) Michael Möller <mmoeller@openhardwaremonitor.org> and Contributors.
// All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Linq;
namespace LibreHardwareMonitor.Hardware;
/// <summary>
/// Object representing a component of the computer.
/// <para>
/// Individual information can be read from the <see cref="Sensors"/>.
/// </para>
/// </summary>
public abstract class Hardware : IHardware
{
protected readonly HashSet<ISensor> _active = new();
protected readonly string _name;
protected readonly ISettings _settings;
private string _customName;
/// <summary>
/// Creates a new <see cref="Hardware"/> instance based on the data provided.
/// </summary>
/// <param name="name">Component name.</param>
/// <param name="identifier">Identifier that will be assigned to the device. Based on <see cref="Identifier"/></param>
/// <param name="settings">Additional settings passed by the <see cref="IComputer"/>.</param>
protected Hardware(string name, Identifier identifier, ISettings settings)
{
_settings = settings;
_name = name;
Identifier = identifier;
_customName = settings.GetValue(new Identifier(Identifier, "name").ToString(), name);
}
/// <summary>
/// Event triggered when <see cref="Hardware"/> is closing.
/// </summary>
public event HardwareEventHandler Closing;
/// <inheritdoc />
public abstract HardwareType HardwareType { get; }
/// <inheritdoc />
public Identifier Identifier { get; }
/// <inheritdoc />
public string Name
{
get { return _customName; }
set
{
_customName = !string.IsNullOrEmpty(value) ? value : _name;
_settings.SetValue(new Identifier(Identifier, "name").ToString(), _customName);
}
}
/// <inheritdoc />
public virtual IHardware Parent
{
get { return null; }
}
/// <inheritdoc />
public virtual IDictionary<string, string> Properties => new SortedDictionary<string, string>();
/// <inheritdoc />
public virtual ISensor[] Sensors
{
get { return _active.ToArray(); }
}
/// <inheritdoc />
public IHardware[] SubHardware
{
get { return Array.Empty<IHardware>(); }
}
/// <inheritdoc />
public virtual string GetReport()
{
return null;
}
/// <inheritdoc />
public abstract void Update();
/// <inheritdoc />
public void Accept(IVisitor visitor)
{
if (visitor == null)
throw new ArgumentNullException(nameof(visitor));
visitor.VisitHardware(this);
}
/// <inheritdoc />
public virtual void Traverse(IVisitor visitor)
{
foreach (ISensor sensor in _active)
sensor.Accept(visitor);
}
/// <inheritdoc />
protected virtual void ActivateSensor(ISensor sensor)
{
if (_active.Add(sensor))
SensorAdded?.Invoke(sensor);
}
/// <inheritdoc />
protected virtual void DeactivateSensor(ISensor sensor)
{
if (_active.Remove(sensor))
SensorRemoved?.Invoke(sensor);
}
/// <inheritdoc />
public virtual void Close()
{
Closing?.Invoke(this);
}
#pragma warning disable 67
public event SensorEventHandler SensorAdded;
public event SensorEventHandler SensorRemoved;
#pragma warning restore 67
}