wanshenmean
2026-03-18 2ef99428f9be29ec299029782edb97baef88e126
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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();
    }
}