/** * @file main.cpp * @brief CMS 系统命令行入口 * * 演示 CMS 核心引擎的基本功能,包括事件接入、任务生成、 * 模板注册、执行状态监控、用户会话管理、通知推送及模式切换。 */ #include "app.hpp" #include #include #include /** * @brief 辅助函数:输出系统状态摘要 * * @param engine CMS 引擎引用 */ static void printSummary(const CmsEngine& engine) { std::cout << engine.getSummary() << "\n\n"; } /** * @brief 辅助函数:打印分隔线 */ static void printSeparator() { std::cout << "────────────────────────────────────────────\n"; } /** * @brief 程序入口 * * 创建 CmsEngine 实例,依次演示各核心功能模块的调用, * 并输出过程日志与最终摘要。 * * @return int 退出码(0 表示正常) */ int main() { std::cout << "╔══════════════════════════════════════════════╗\n"; std::cout << "║ CMS — Command Management System v1.0.0 ║\n"; std::cout << "╚══════════════════════════════════════════════╝\n\n"; CmsEngine engine; // ── 1. 初始状态 ────────────────────────────────────────────────────── std::cout << "[1] 初始状态\n"; printSummary(engine); printSeparator(); // ── 2. 接入战场事件 ────────────────────────────────────────────────── std::cout << "[2] 接入战场事件\n"; EventRecord evt1; evt1.id = "EVT-001"; evt1.typeTag = "air_raid"; evt1.latitude = 34.5; evt1.longitude = 120.3; evt1.altitude = 5000.0; evt1.payload = R"({"target":"bomber","speed":800})"; evt1.priority = 200; evt1.threatLevel = 4; evt1.receiveTime = std::chrono::system_clock::now(); evt1.status = EventStatus::Pending; if (engine.ingestEvent(evt1)) { std::cout << " [+] 事件 EVT-001 接入成功\n"; } EventRecord evt2; evt2.id = "EVT-002"; evt2.typeTag = "naval_intrusion"; evt2.latitude = 28.1; evt2.longitude = 122.7; evt2.altitude = 0.0; evt2.payload = R"({"vessel":"destroyer","bearing":270})"; evt2.priority = 150; evt2.threatLevel = 3; evt2.receiveTime = std::chrono::system_clock::now(); evt2.status = EventStatus::Pending; if (engine.ingestEvent(evt2)) { std::cout << " [+] 事件 EVT-002 接入成功\n"; } std::cout << "\n"; printSeparator(); // ── 3. 处理待处理事件 → 自动生成任务方案 ────────────────────────────── std::cout << "[3] 处理待处理事件(自动生成任务方案)\n"; size_t processed = engine.processPendingEvents(); std::cout << " [+] 已处理 " << processed << " 个事件,生成相应任务方案\n\n"; printSeparator(); // ── 4. 注册模板 ─────────────────────────────────────────────────────── std::cout << "[4] 注册任务模板\n"; TemplateInstance tmpl1; tmpl1.id = "TMPL-001"; tmpl1.scenario = "air_defense"; tmpl1.complexity = 0.7; tmpl1.version = "2.1.0"; tmpl1.subTaskTree = {"侦察", "拦截", "评估"}; tmpl1.dependencies = {"雷达数据就绪"}; tmpl1.confidence = 0.92; engine.registerTemplate(tmpl1); std::cout << " [+] 模板 TMPL-001(空天防御)已注册\n"; TemplateInstance tmpl2; tmpl2.id = "TMPL-002"; tmpl2.scenario = "naval_defense"; tmpl2.complexity = 0.6; tmpl2.version = "1.8.0"; tmpl2.subTaskTree = {"海域监视", "目标识别", "反制"}; tmpl2.dependencies = {"卫星数据就绪"}; tmpl2.confidence = 0.88; engine.registerTemplate(tmpl2); std::cout << " [+] 模板 TMPL-002(海域防御)已注册\n\n"; printSeparator(); // ── 5. 模板匹配 ────────────────────────────────────────────────────── std::cout << "[5] 模板匹配测试\n"; const auto* matched = engine.matchTemplate("air_defense"); if (matched) { std::cout << " [+] 匹配模板: " << matched->id << " (场景: " << matched->scenario << ", 置信度: " << matched->confidence << ")\n"; } std::cout << "\n"; printSeparator(); // ── 6. 用户会话与权限 ──────────────────────────────────────────────── std::cout << "[6] 用户会话与权限\n"; UserSession admin; admin.userId = "U-001"; admin.roleCode = "ADMIN"; admin.permissionBitmap = 0xFFFFFFFFFFFFFFFFULL; admin.accessToken = "tok_admin_abc123"; admin.expireTime = std::chrono::system_clock::now() + std::chrono::hours(8); admin.clientIp = "192.168.1.100"; if (engine.createSession(admin)) { std::cout << " [+] 管理员会话 U-001 创建成功\n"; } UserSession viewer; viewer.userId = "U-002"; viewer.roleCode = "VIEWER"; viewer.permissionBitmap = 0x0000000000000001ULL; // 只读权限 viewer.accessToken = "tok_viewer_xyz456"; viewer.expireTime = std::chrono::system_clock::now() + std::chrono::hours(2); viewer.clientIp = "192.168.1.101"; if (engine.createSession(viewer)) { std::cout << " [+] 观察员会话 U-002 创建成功\n"; } // 权限校验 uint64_t needWrite = 0x0000000000000002ULL; std::cout << " [*] U-001 写入权限: " << (engine.checkPermission("U-001", needWrite) ? "通过" : "拒绝") << "\n"; std::cout << " [*] U-002 写入权限: " << (engine.checkPermission("U-002", needWrite) ? "通过" : "拒绝") << "\n"; std::cout << "\n"; printSeparator(); // ── 7. 执行状态上报与健康检查 ──────────────────────────────────────── std::cout << "[7] 执行状态上报与健康检查\n"; ExecutionStatus st1; st1.nodeId = "NODE-A1"; st1.progress = 0.75; st1.healthIndex = 0.95; st1.resourceUsage = 0.45; st1.heartbeatSignal = 1024; st1.errorCode = 0; st1.lastReport = std::chrono::system_clock::now(); engine.reportExecutionStatus(st1); std::cout << " [+] 节点 NODE-A1 状态已上报\n"; ExecutionStatus st2; st2.nodeId = "NODE-B2"; st2.progress = 0.30; st2.healthIndex = 0.25; // 低于 0.5 → 异常 st2.resourceUsage = 0.90; st2.heartbeatSignal = 512; st2.errorCode = 0xE003; // 非零异常码 st2.lastReport = std::chrono::system_clock::now() - std::chrono::seconds(45); // 超时 engine.reportExecutionStatus(st2); std::cout << " [+] 节点 NODE-B2 状态已上报(模拟异常)\n"; auto unhealthy = engine.checkHealth(); std::cout << " [*] 异常节点数: " << unhealthy.size() << "\n"; for (const auto& u : unhealthy) { std::cout << " - " << u.nodeId << " (健康指数: " << u.healthIndex << ", 异常码: " << u.errorCode << ")\n"; } std::cout << "\n"; printSeparator(); // ── 8. 通知推送 ─────────────────────────────────────────────────────── std::cout << "[8] 通知推送\n"; NotificationMessage alert; alert.id = "NOTIFY-001"; alert.priority = 255; alert.type = NotificationType::Alert; alert.summary = "节点 NODE-B2 健康指数异常,请尽快处理!"; alert.triggerTime = std::chrono::system_clock::now(); alert.isRead = false; engine.pushNotification(alert); std::cout << " [+] 告警通知已推送\n"; NotificationMessage hint; hint.id = "NOTIFY-002"; hint.priority = 50; hint.type = NotificationType::Hint; hint.summary = "模板 TMPL-002 更新至 v2.0.0 可用"; hint.triggerTime = std::chrono::system_clock::now(); hint.isRead = false; engine.pushNotification(hint); std::cout << " [+] 提示通知已推送\n"; auto unread = engine.getUnreadNotifications(); std::cout << " [*] 未读通知数: " << unread.size() << "\n"; for (const auto& n : unread) { std::cout << " - [" << (n.type == NotificationType::Alert ? "告警" : n.type == NotificationType::Hint ? "提示" : "确认") << "] " << n.summary << "\n"; } std::cout << "\n"; printSeparator(); // ── 9. 模式切换 ─────────────────────────────────────────────────────── std::cout << "[9] 运行模式切换\n"; std::cout << " [*] 当前模式: Idle\n"; if (engine.switchMode(RunMode::HumanLoop)) { std::cout << " [+] 切换至 HumanLoop 成功\n"; } if (engine.switchMode(RunMode::AutoExec)) { std::cout << " [+] 切换至 AutoExec 成功\n"; } // 模拟降级 if (engine.switchMode(RunMode::Degraded)) { std::cout << " [+] 切换至 Degraded 成功\n"; } // 尝试从降级退出(应被拒绝) if (!engine.switchMode(RunMode::Idle)) { std::cout << " [-] 从 Degraded 切回 Idle 被拒绝(符合故障隔离策略)\n"; } std::cout << "\n"; printSeparator(); // ── 10. 最终摘要 ───────────────────────────────────────────────────── std::cout << "[10] 最终系统摘要\n"; printSummary(engine); std::cout << "╔══════════════════════════════════════════════╗\n"; std::cout << "║ 演示结束 — 系统运行正常 ║\n"; std::cout << "╚══════════════════════════════════════════════╝\n"; return 0; }