plan_execute_t1/src/main.cpp

274 lines
11 KiB
C++
Raw Permalink Normal View History

2026-05-06 14:04:42 +00:00
/**
* @file main.cpp
* @brief CMS
*
* CMS
*
*/
#include "app.hpp"
#include <iostream>
#include <thread>
#include <chrono>
/**
* @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;
}