using System;
namespace XP.Hardware.RaySource.Abstractions
{
///
/// 射线源抽象基类 | Abstract Base Class for X-Ray Sources
/// 提供策略接口的基础实现框架 | Provides foundational implementation framework for strategy interface
///
public abstract class XRaySourceBase : IXRaySource
{
protected bool _isDisposed = false;
protected bool _isInitialized = false;
protected bool _isConnected = false;
///
/// 射线源名称(用于日志)| X-ray source name (for logging)
///
public virtual string SourceName => "Generic X-Ray Source";
///
/// 是否已连接 | Is connected
///
public virtual bool IsConnected => _isConnected && _isInitialized;
#region IXRaySource Implementation
public abstract XRayResult Initialize();
public abstract XRayResult ConnectVariables();
public abstract XRayResult TurnOn();
public abstract XRayResult TurnOff();
public abstract XRayResult CloseOff();
public abstract XRayResult SetVoltage(float voltage);
public abstract XRayResult SetCurrent(float current);
public abstract XRayResult SetFocus(float focus);
public abstract XRayResult ReadVoltage();
public abstract XRayResult ReadCurrent();
public abstract XRayResult ReadSystemStatus();
public abstract XRayResult CheckErrors();
public abstract XRayResult TxiOn();
public abstract XRayResult TxiOff();
public abstract XRayResult WarmUp();
public abstract XRayResult Training();
public abstract XRayResult FilamentCalibration();
public abstract XRayResult AutoCenter();
public abstract XRayResult SetPowerMode(int mode);
#endregion
#region IDisposable Implementation
///
/// 释放资源 | Release resources
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 受保护的释放方法 | Protected dispose method
///
/// 是否由用户代码调用 | Whether called from user code
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{
// 释放托管资源 | Release managed resources
try
{
// 尝试安全关闭 | Attempt safe shutdown
if (_isInitialized)
{
CloseOff();
}
}
catch (Exception ex)
{
Console.WriteLine(
$"[射线源关闭异常 | X-Ray Source Close Exception] {SourceName}: {ex.Message}");
}
}
_isDisposed = true;
}
}
///
/// 析构函数(作为安全网)| Finalizer (as safety net)
///
~XRaySourceBase()
{
Dispose(false);
}
#endregion
}
}