1
wanshenmean
2026-03-16 689dd676fc0efb31236d989334122590b7198d61
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs
@@ -25,15 +25,27 @@
        /// <summary>
        /// 获取所有实例列表
        /// </summary>
        [HttpGet]
        [ProducesResponseType(typeof(IEnumerable<InstanceState>), StatusCodes.Status200OK)]
        public ActionResult<IEnumerable<InstanceState>> GetAllInstances()
        [HttpGet("GetAll")]
        [ProducesResponseType(typeof(IEnumerable<object>), StatusCodes.Status200OK)]
        public ActionResult GetAllInstances()
        {
            try
            {
                var instances = _instanceManager.GetAllInstances();
                var states = instances.Select(i => i.GetState()).ToList();
                return Ok(states);
                var result = instances.Select(i => new
                {
                    instanceId = i.Config.Id,
                    name = i.Config.Name,
                    plcType = i.Config.PLCType.ToString(),
                    port = i.Config.Port,
                    status = i.GetState().Status.ToString(),
                    clientCount = i.GetState().ClientCount,
                    totalRequests = i.GetState().TotalRequests,
                    startTime = i.GetState().StartTime,
                    lastActivityTime = i.GetState().LastActivityTime,
                    errorMessage = i.GetState().ErrorMessage
                }).ToList();
                return Ok(result);
            }
            catch (Exception ex)
            {
@@ -45,10 +57,10 @@
        /// <summary>
        /// 创建新实例
        /// </summary>
        [HttpPost]
        [ProducesResponseType(typeof(InstanceState), StatusCodes.Status201Created)]
        [HttpPost("Create")]
        [ProducesResponseType(typeof(object), StatusCodes.Status201Created)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        public async Task<ActionResult<InstanceState>> CreateInstance([FromBody] InstanceConfig config)
        public async Task<ActionResult> CreateInstance([FromBody] InstanceConfig config)
        {
            try
            {
@@ -79,11 +91,24 @@
                var instance = await _instanceManager.CreateInstanceAsync(config);
                var state = instance.GetState();
                var result = new
                {
                    instanceId = instance.Config.Id,
                    name = instance.Config.Name,
                    plcType = instance.Config.PLCType.ToString(),
                    port = instance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return CreatedAtAction(
                    nameof(GetInstance),
                    new { id = config.Id },
                    state);
                    result);
            }
            catch (ArgumentException ex)
            {
@@ -100,10 +125,10 @@
        /// <summary>
        /// 获取指定实例详情
        /// </summary>
        [HttpGet("{id}")]
        [ProducesResponseType(typeof(InstanceState), StatusCodes.Status200OK)]
        [HttpGet("GetInstance")]
        [ProducesResponseType(typeof(object), StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public ActionResult<InstanceState> GetInstance(string id)
        public ActionResult GetInstance(string id)
        {
            try
            {
@@ -119,7 +144,20 @@
                }
                var state = instance.GetState();
                return Ok(state);
                var result = new
                {
                    instanceId = instance.Config.Id,
                    name = instance.Config.Name,
                    plcType = instance.Config.PLCType.ToString(),
                    port = instance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return Ok(result);
            }
            catch (Exception ex)
            {
@@ -129,13 +167,43 @@
        }
        /// <summary>
        /// 获取指定实例的配置
        /// </summary>
        [HttpGet("GetInstanceConfig")]
        [ProducesResponseType(typeof(InstanceConfig), StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public ActionResult<InstanceConfig> GetInstanceConfig(string id)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(id))
                {
                    return BadRequest(new { error = "Instance ID is required" });
                }
                var instance = _instanceManager.GetInstance(id);
                if (instance == null)
                {
                    return NotFound(new { error = $"Instance with ID '{id}' not found" });
                }
                return Ok(instance.Config);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Failed to get instance config {InstanceId}", id);
                return StatusCode(StatusCodes.Status500InternalServerError, new { error = "Failed to retrieve instance config" });
            }
        }
        /// <summary>
        /// 更新实例配置
        /// </summary>
        [HttpPut("{id}")]
        [ProducesResponseType(typeof(InstanceState), StatusCodes.Status200OK)]
        [HttpPut("Update")]
        [ProducesResponseType(typeof(object), StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public async Task<ActionResult<InstanceState>> UpdateInstance(string id, [FromBody] InstanceConfig config)
        public async Task<ActionResult> UpdateInstance([FromQuery] string id, [FromBody] InstanceConfig config)
        {
            try
            {
@@ -175,7 +243,20 @@
                }
                var state = newInstance.GetState();
                return Ok(state);
                var result = new
                {
                    instanceId = newInstance.Config.Id,
                    name = newInstance.Config.Name,
                    plcType = newInstance.Config.PLCType.ToString(),
                    port = newInstance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return Ok(result);
            }
            catch (ArgumentException ex)
            {
@@ -192,10 +273,10 @@
        /// <summary>
        /// 删除实例
        /// </summary>
        [HttpDelete("{id}")]
        [HttpDelete("Delete")]
        [ProducesResponseType(StatusCodes.Status204NoContent)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public async Task<IActionResult> DeleteInstance(string id, [FromQuery] bool deleteConfig = true)
        public async Task<IActionResult> DeleteInstance(string id, bool deleteConfig = true)
        {
            try
            {
@@ -222,11 +303,11 @@
        /// <summary>
        /// 启动实例
        /// </summary>
        [HttpPost("{id}/start")]
        [HttpPost("start")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        public async Task<ActionResult<InstanceState>> StartInstance(string id)
        public async Task<ActionResult> StartInstance([FromQuery] string id)
        {
            try
            {
@@ -248,7 +329,20 @@
                var instance = _instanceManager.GetInstance(id);
                var state = instance?.GetState();
                return Ok(state);
                var result = new
                {
                    instanceId = instance.Config.Id,
                    name = instance.Config.Name,
                    plcType = instance.Config.PLCType.ToString(),
                    port = instance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return Ok(result);
            }
            catch (Exception ex)
            {
@@ -260,10 +354,10 @@
        /// <summary>
        /// 停止实例
        /// </summary>
        [HttpPost("{id}/stop")]
        [HttpPost("stop")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public async Task<ActionResult<InstanceState>> StopInstance(string id)
        public async Task<ActionResult> StopInstance([FromQuery] string id)
        {
            try
            {
@@ -281,7 +375,20 @@
                var instance = _instanceManager.GetInstance(id);
                var state = instance?.GetState();
                return Ok(state);
                var result = new
                {
                    instanceId = instance.Config.Id,
                    name = instance.Config.Name,
                    plcType = instance.Config.PLCType.ToString(),
                    port = instance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return Ok(result);
            }
            catch (Exception ex)
            {
@@ -293,11 +400,11 @@
        /// <summary>
        /// 重启实例
        /// </summary>
        [HttpPost("{id}/restart")]
        [HttpPost("restart")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        public async Task<ActionResult<InstanceState>> RestartInstance(string id)
        public async Task<ActionResult> RestartInstance([FromQuery] string id)
        {
            try
            {
@@ -319,7 +426,20 @@
                var instance = _instanceManager.GetInstance(id);
                var state = instance?.GetState();
                return Ok(state);
                var result = new
                {
                    instanceId = instance.Config.Id,
                    name = instance.Config.Name,
                    plcType = instance.Config.PLCType.ToString(),
                    port = instance.Config.Port,
                    status = state.Status.ToString(),
                    clientCount = state.ClientCount,
                    totalRequests = state.TotalRequests,
                    startTime = state.StartTime,
                    lastActivityTime = state.LastActivityTime,
                    errorMessage = state.ErrorMessage
                };
                return Ok(result);
            }
            catch (Exception ex)
            {