ThreatSourceLibaray/ThreatSource/src/Simulation/ISimulationManager.cs

258 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ThreatSource.Utils;
using AirTransmission;
namespace ThreatSource.Simulation
{
/// <summary>
/// 仿真环境数据类,包含环境相关的参数
/// </summary>
/// <remarks>
/// 该类封装了仿真环境的关键参数:
/// - 大气参数(密度、温度、湿度)
/// - 气象条件(风速、能见度)
/// - 地理信息(地形、高程)
/// 用于模拟真实环境对仿真的影响
/// </remarks>
public class SimulationEnvironmentData
{
/// <summary>
/// 获取或设置大气密度,单位:千克/立方米
/// </summary>
public double AtmosphericDensity { get; set; }
/// <summary>
/// 获取或设置风速向量,单位:米/秒
/// </summary>
public Vector3D WindVelocity { get; set; } = Vector3D.Zero;
/// <summary>
/// 获取或设置环境温度,单位:开尔文
/// </summary>
public double Temperature { get; set; }
/// <summary>
/// 获取或设置相对湿度范围0-1
/// </summary>
public double RelativeHumidity { get; set; }
/// <summary>
/// 获取或设置能见度,单位:米
/// </summary>
public double Visibility { get; set; }
}
/// <summary>
/// 第三方仿真环境适配器接口
/// </summary>
/// <remarks>
/// 该接口用于与外部仿真环境进行集成,提供实体查询和事件交互功能。
/// 实现此接口可以将威胁源仿真库与其他仿真系统对接。
/// </remarks>
public interface ISimulationAdapter
{
/// <summary>
/// 从外部仿真环境获取实体
/// </summary>
/// <param name="id">实体ID</param>
/// <returns>实体对象如果不存在则返回null</returns>
object? GetEntity(string id);
/// <summary>
/// 发布事件到第三方仿真环境
/// </summary>
/// <typeparam name="T">事件类型</typeparam>
/// <param name="evt">要发布的事件</param>
/// <remarks>
/// 用于将威胁源仿真库中的事件同步到外部仿真环境
/// </remarks>
void PublishToExternalSimulation<T>(T evt);
/// <summary>
/// 从第三方仿真环境接收事件
/// </summary>
/// <typeparam name="T">事件类型</typeparam>
/// <param name="evt">接收到的事件</param>
/// <remarks>
/// 用于接收外部仿真环境的事件并在威胁源仿真库中处理
/// </remarks>
void ReceiveFromExternalSimulation<T>(T evt);
/// <summary>
/// 获取实体的状态
/// </summary>
/// <param name="id">实体ID</param>
/// <returns>实体的状态数据</returns>
object? GetEntityState(string id);
/// <summary>
/// 设置实体的环境数据
/// </summary>
/// <param name="id">实体ID</param>
/// <param name="data">实体的环境数据</param>
void SetEntityEnvironment(string id, SimulationEnvironmentData data);
/// <summary>
/// 同步仿真时间
/// </summary>
/// <param name="simulationTime">仿真时间</param>
void SynchronizeTime(double simulationTime);
}
/// <summary>
/// 仿真管理器接口,定义仿真系统的核心功能
/// </summary>
/// <remarks>
/// 该接口定义了仿真系统应提供的基本功能:
/// - 事件系统:支持发布/订阅模式的事件处理
/// - 实体管理:实体的注册、注销和查询
/// - 仿真控制:启动、暂停、恢复和停止仿真
/// - 第三方集成:支持与外部仿真环境的对接
/// </remarks>
public interface ISimulationManager
{
/// <summary>
/// 获取当前仿真状态
/// </summary>
SimulationState State { get; }
/// <summary>
/// 获取当前仿真时间
/// </summary>
double CurrentTime { get; }
/// <summary>
/// 获取当前天气系统
/// </summary>
Weather? CurrentWeather { get; }
/// <summary>
/// 设置当前天气
/// </summary>
/// <param name="weather">天气条件</param>
void SetWeather(Weather weather);
/// <summary>
/// 启动仿真系统
/// </summary>
/// <param name="timeStep">时间步长</param>
void StartSimulation(double timeStep);
/// <summary>
/// 暂停仿真系统
/// </summary>
void PauseSimulation();
/// <summary>
/// 恢复仿真系统
/// </summary>
void ResumeSimulation();
/// <summary>
/// 停止仿真系统
/// </summary>
void StopSimulation();
/// <summary>
/// 更新仿真系统
/// </summary>
/// <param name="deltaTime">时间步长</param>
void Update(double deltaTime);
#region
/// <summary>
/// 发布事件到仿真系统
/// </summary>
/// <typeparam name="T">事件类型</typeparam>
/// <param name="evt">要发布的事件</param>
void PublishEvent<T>(T evt);
/// <summary>
/// 订阅特定类型的事件
/// </summary>
/// <typeparam name="T">事件类型</typeparam>
/// <param name="handler">事件处理函数</param>
void SubscribeToEvent<T>(Action<T> handler);
/// <summary>
/// 取消订阅特定类型的事件
/// </summary>
/// <typeparam name="T">事件类型</typeparam>
/// <param name="handler">要取消的事件处理函数</param>
void UnsubscribeFromEvent<T>(Action<T> handler);
#endregion
#region
/// <summary>
/// 注册实体到仿真系统
/// </summary>
/// <param name="id">实体ID</param>
/// <param name="entity">实体对象</param>
/// <returns>注册是否成功</returns>
bool RegisterEntity(string id, object entity);
/// <summary>
/// 从仿真系统注销实体
/// </summary>
/// <param name="id">要注销的实体ID</param>
/// <returns>注销是否成功</returns>
bool UnregisterEntity(string id);
/// <summary>
/// 根据ID获取实体
/// </summary>
/// <param name="id">实体ID</param>
/// <returns>实体对象如果不存在则返回null</returns>
object? GetEntityById(string id);
/// <summary>
/// 获取特定类型的所有实体
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <returns>指定类型的实体列表</returns>
IReadOnlyList<T> GetEntitiesByType<T>() where T : class;
/// <summary>
/// 获取仿真系统中的所有实体
/// </summary>
/// <returns>所有实体的列表</returns>
IReadOnlyList<object> GetAllEntities();
#endregion
#region 仿
/// <summary>
/// 设置第三方仿真环境适配器
/// </summary>
/// <param name="adapter">要设置的适配器实例</param>
/// <remarks>
/// 用于配置与外部仿真环境的集成
/// </remarks>
void SetSimulationAdapter(ISimulationAdapter adapter);
/// <summary>
/// 获取当前的仿真环境适配器
/// </summary>
/// <returns>当前配置的适配器实例如果未配置则返回null</returns>
ISimulationAdapter? GetSimulationAdapter();
#endregion
}
/// <summary>
/// 仿真状态
/// </summary>
public enum SimulationState
{
/// <summary>
/// 停止状态
/// </summary>
Stopped,
/// <summary>
/// 运行状态
/// </summary>
Running,
/// <summary>
/// 暂停状态
/// </summary>
Paused // 暂停状态
}
}