using System.Collections.Generic; using System.IO; using System.Linq; using Newtonsoft.Json; using CncSimulator.Config; using CncSimulator.Core; using CncSimulator.Device; namespace CncSimulator.Core { /// 引擎:管理多个 SimulatorServer 实例 public class SimulatorEngine { private readonly List _servers = new List(); public void LoadConfig(string jsonPath) { var json = File.ReadAllText(jsonPath); var cfg = JsonConvert.DeserializeObject(json); LoadConfig(cfg); } public void LoadConfig(SimulatorConfig cfg) { _servers.Clear(); foreach (var addr in cfg.Addresses) { var devices = new List(); foreach (var d in addr.Devices) { devices.Add(new DeviceSimulator(d, addr.DataChangeInterval)); } var server = new SimulatorServer(addr, devices); _servers.Add(server); } } public void StartAll() { foreach (var s in _servers) s.Start(); } public void StopAll() { foreach (var s in _servers) s.Stop(); } public object GetStatus() { return _servers.Select(s => new { address = s.Address.Name, port = s.Address.Port, running = s.IsRunning, totalDevices = s.TotalDeviceCount, onlineDevices = s.OnlineDeviceCount }).ToList(); } public SimulatorServer FindByPort(int port) { return _servers.FirstOrDefault(s => s.Address.Port == port); } } }