using System.Collections.Generic;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_S7Simulator.Core.Entities;
|
using WIDESEAWCS_S7Simulator.Core.Enums;
|
|
namespace WIDESEAWCS_S7Simulator.Core.Interfaces
|
{
|
/// <summary>
|
/// 仿真器实例管理器接口
|
/// 管理多个S7服务器实例的生命周期
|
/// </summary>
|
public interface ISimulatorInstanceManager
|
{
|
/// <summary>
|
/// 实例状态变化事件
|
/// </summary>
|
event EventHandler<InstanceStateChangedEventArgs>? InstanceStateChanged;
|
|
/// <summary>
|
/// 获取所有实例
|
/// </summary>
|
/// <returns>实例列表</returns>
|
IReadOnlyList<IS7ServerInstance> GetAllInstances();
|
|
/// <summary>
|
/// 根据ID获取实例
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <returns>实例,不存在则返回null</returns>
|
IS7ServerInstance? GetInstance(string instanceId);
|
|
/// <summary>
|
/// 检查实例是否存在
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <returns>是否存在</returns>
|
bool InstanceExists(string instanceId);
|
|
/// <summary>
|
/// 创建新实例
|
/// </summary>
|
/// <param name="config">实例配置</param>
|
/// <returns>创建的实例</returns>
|
Task<IS7ServerInstance> CreateInstanceAsync(InstanceConfig config);
|
|
/// <summary>
|
/// 启动实例
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <returns>是否成功</returns>
|
Task<bool> StartInstanceAsync(string instanceId);
|
|
/// <summary>
|
/// 停止实例
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
Task StopInstanceAsync(string instanceId);
|
|
/// <summary>
|
/// 重启实例
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <returns>是否成功</returns>
|
Task<bool> RestartInstanceAsync(string instanceId);
|
|
/// <summary>
|
/// 删除实例
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <param name="deleteConfig">是否删除配置文件</param>
|
Task DeleteInstanceAsync(string instanceId, bool deleteConfig = true);
|
|
/// <summary>
|
/// 获取实例状态
|
/// </summary>
|
/// <param name="instanceId">实例ID</param>
|
/// <returns>实例状态,不存在则返回null</returns>
|
InstanceState? GetInstanceState(string instanceId);
|
|
/// <summary>
|
/// 获取所有实例状态
|
/// </summary>
|
/// <returns>实例状态列表</returns>
|
IReadOnlyList<InstanceState> GetAllInstanceStates();
|
|
/// <summary>
|
/// 加载所有已保存的实例
|
/// </summary>
|
/// <param name="autoStart">是否自动启动标记为AutoStart的实例</param>
|
Task LoadSavedInstancesAsync(bool autoStart = true);
|
|
/// <summary>
|
/// 停止所有实例
|
/// </summary>
|
Task StopAllInstancesAsync();
|
|
/// <summary>
|
/// 获取运行中的实例数量
|
/// </summary>
|
int GetRunningInstanceCount();
|
|
/// <summary>
|
/// 获取实例总数
|
/// </summary>
|
int GetTotalInstanceCount();
|
}
|
|
/// <summary>
|
/// 实例状态变化事件参数
|
/// </summary>
|
public class InstanceStateChangedEventArgs : EventArgs
|
{
|
/// <summary>
|
/// 实例ID
|
/// </summary>
|
public string InstanceId { get; set; } = string.Empty;
|
|
/// <summary>
|
/// 旧状态
|
/// </summary>
|
public InstanceStatus OldStatus { get; set; }
|
|
/// <summary>
|
/// 新状态
|
/// </summary>
|
public InstanceStatus NewStatus { get; set; }
|
|
/// <summary>
|
/// 实例状态
|
/// </summary>
|
public InstanceState InstanceState { get; set; } = new();
|
}
|
}
|