using Aveva.ApplicationFramework; using System; using System.Windows.Forms; using Aveva.ApplicationFramework; using TellmePdmsPluging.Network; using TellmePdmsPluging.Core; namespace TellmePdmsPluging { public class TellmePdmsAddin : IAddin { private HttpServer _httpServer; public string Name { get { return "TellmePdmsAddin"; } } public string Description { get { return "PDMS远程控制插件"; } } /// /// 程序打开时,会调用这个方法 /// /// public void Start(ServiceManager serviceManager) { try { // 记录启动日志 LogMessage("开始启动TellmePdms插件..."); SafeQueue.Init(); // 启动HTTP服务器 _httpServer = new HttpServer(9001); _httpServer.Start(); Application.Idle += OnIdle; // 弹出成功提示 MessageBox.Show( "TellmePdms插件已成功加载!\n" + "HTTP服务器已启动,监听端口: 9001\n\n" + "测试地址:\n" + "- 健康检查: http://localhost:9001/health\n" + "- 测试接口: http://localhost:9001/test", "插件加载成功", MessageBoxButtons.OK, MessageBoxIcon.Information); LogMessage("TellmePdms插件启动成功"); } catch (Exception ex) { string errorMsg = $"插件启动失败: {ex.Message}"; LogMessage($"ERROR: {errorMsg}\n{ex.StackTrace}"); MessageBox.Show(errorMsg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// 程序关闭时,会调用这个方法 /// public void Stop() { try { LogMessage("开始停止TellmePdms插件..."); Application.Idle -= OnIdle; // 停止HTTP服务器 if (_httpServer != null) { _httpServer.Stop(); _httpServer.Dispose(); _httpServer = null; } LogMessage("TellmePdms插件已停止"); } catch (Exception ex) { LogMessage($"插件停止时出错: {ex.Message}"); } } private void OnIdle(object sender, EventArgs e) { try { while (SafeQueue.TryDequeue(out ICommand cmd)) { cmd.Execute(); } } catch (Exception ex) { LogMessage($"Idle执行命令时出错: {ex.Message}"); } } private void LogMessage(string message) { try { string logPath = @"C:\temp\pdms_plugin_log.txt"; string logEntry = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}\r\n"; System.IO.File.AppendAllText(logPath, logEntry); } catch { } } } }