From 737dec3c384f394fd6f9849b4480b697d1ba35d5 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 17 三月 2026 09:16:44 +0800
Subject: [PATCH] chore: 提交所有当前改动
---
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs
index d748391..5fe5fc8 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Controllers/SimulatorInstancesController.cs
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_S7Simulator.Application.Protocol;
using WIDESEAWCS_S7Simulator.Core.Entities;
using WIDESEAWCS_S7Simulator.Core.Interfaces;
@@ -12,13 +13,16 @@
public class SimulatorInstancesController : ControllerBase
{
private readonly ISimulatorInstanceManager _instanceManager;
+ private readonly IProtocolTemplateService _protocolTemplateService;
private readonly ILogger<SimulatorInstancesController> _logger;
public SimulatorInstancesController(
ISimulatorInstanceManager instanceManager,
+ IProtocolTemplateService protocolTemplateService,
ILogger<SimulatorInstancesController> logger)
{
_instanceManager = instanceManager ?? throw new ArgumentNullException(nameof(instanceManager));
+ _protocolTemplateService = protocolTemplateService ?? throw new ArgumentNullException(nameof(protocolTemplateService));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
@@ -87,6 +91,18 @@
if (config.Port <= 0 || config.Port > 65535)
{
return BadRequest(new { error = "Port must be between 1 and 65535" });
+ }
+
+ NormalizeMemoryConfig(config);
+
+ if (string.IsNullOrWhiteSpace(config.ProtocolTemplateId))
+ {
+ return BadRequest(new { error = "Protocol template is required" });
+ }
+
+ if (!await _protocolTemplateService.ExistsAsync(config.ProtocolTemplateId))
+ {
+ return BadRequest(new { error = $"Protocol template '{config.ProtocolTemplateId}' not found" });
}
var instance = await _instanceManager.CreateInstanceAsync(config);
@@ -227,6 +243,18 @@
if (config.Port <= 0 || config.Port > 65535)
{
return BadRequest(new { error = "Port must be between 1 and 65535" });
+ }
+
+ NormalizeMemoryConfig(config);
+
+ if (string.IsNullOrWhiteSpace(config.ProtocolTemplateId))
+ {
+ return BadRequest(new { error = "Protocol template is required" });
+ }
+
+ if (!await _protocolTemplateService.ExistsAsync(config.ProtocolTemplateId))
+ {
+ return BadRequest(new { error = $"Protocol template '{config.ProtocolTemplateId}' not found" });
}
// Delete existing instance and recreate with new config
@@ -491,5 +519,32 @@
return StatusCode(StatusCodes.Status500InternalServerError, new { error = "Failed to stop instances" });
}
}
+
+ /// <summary>
+ /// 瑙勮寖鍖栧苟鏍¢獙鍐呭瓨閰嶇疆锛屼紭鍏堜娇鐢ㄦ樉寮� DB 鍧楀垪琛ㄣ��
+ /// </summary>
+ private static void NormalizeMemoryConfig(InstanceConfig config)
+ {
+ if (config.MemoryConfig == null)
+ {
+ config.MemoryConfig = new MemoryRegionConfig();
+ }
+
+ var dbBlockNumbers = (config.MemoryConfig.DBBlockNumbers ?? new List<int>())
+ .Where(x => x > 0)
+ .Distinct()
+ .OrderBy(x => x)
+ .ToList();
+
+ if (dbBlockNumbers.Count == 0)
+ {
+ var count = config.MemoryConfig.DBBlockCount > 0 ? config.MemoryConfig.DBBlockCount : 1;
+ dbBlockNumbers = Enumerable.Range(1, count).ToList();
+ }
+
+ config.MemoryConfig.DBBlockNumbers = dbBlockNumbers;
+ config.MemoryConfig.DBBlockCount = dbBlockNumbers.Count;
+ config.MemoryConfig.DBBlockSize = config.MemoryConfig.DBBlockSize > 0 ? config.MemoryConfig.DBBlockSize : 1024;
+ }
}
}
--
Gitblit v1.9.3