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);
}
}
}