using System; using System.IO; using System.Threading; using CncSimulator.Core; using CncSimulator.Config; using Newtonsoft.Json; namespace CncSimulator { /// /// CNC模拟采集服务主入口。 /// 读取配置→启动引擎→等待退出。 /// class Program { static void Main(string[] args) { // 初始化log4net log4net.Config.XmlConfigurator.Configure(); Console.WriteLine("CNC 模拟采集服务 v1.0"); Console.WriteLine("================================================"); // 读取配置 string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "simulator.json"); if (!File.Exists(configPath)) { // 尝试从项目根目录读取(开发模式) configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "..", "simulator.json"); } if (!File.Exists(configPath)) { Console.WriteLine("错误: 找不到配置文件 simulator.json"); Console.WriteLine("按任意键退出..."); Console.ReadKey(); return; } string json = File.ReadAllText(configPath); var config = JsonConvert.DeserializeObject(json); // 显示配置 Console.WriteLine("加载配置: simulator.json"); foreach (var addr in config.Addresses) { Console.WriteLine($" - {addr.Name} (:{addr.Port}) {addr.Devices.Count}台设备"); } // 创建引擎 var engine = new SimulatorEngine(); engine.LoadConfig(config); // 从数据库读取采集地址和机床 Console.WriteLine("\n连接数据库..."); if (engine.LoadFromDatabase(out string dbError)) { Console.WriteLine($" [✓] 数据库连接成功,读取到 {engine.DbAddresses.Count} 个采集地址"); foreach (var a in engine.DbAddresses) { Console.WriteLine($" - {a.Name} ({a.Machines.Count}台机床)"); } } else { Console.WriteLine($" [✗] 数据库连接失败: {dbError}"); Console.WriteLine(" 将以空配置启动,可在管理界面手动配置"); } // 只启动管理页面(不自动启动模拟端口) Console.WriteLine("\n启动管理页面..."); engine.StartGateway(); Console.WriteLine("\n请在浏览器中打开管理页面配置并启动模拟。"); Console.WriteLine("按任意键退出..."); Console.ReadKey(); engine.StopAll(); Console.WriteLine("已退出。"); } } }