ceo: 完成configs迁移和main.rs插件注册

- 从旧项目复制dog_state_machine.json和cat_state_machine.json
- 实现main.rs完整插件注册(screen, wifi, video, ble, http)
- 添加命令行参数支持(--config, --validate)
- 实现Ctrl+C优雅退出
- 添加ctrlc依赖
This commit is contained in:
showen
2026-03-12 07:15:21 +08:00
parent 765e1f1a78
commit 0709d0de05
6 changed files with 2529 additions and 8 deletions

72
Cargo.lock generated
View File

@@ -29,6 +29,12 @@ version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "bitflags"
version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]]
name = "block-buffer"
version = "0.10.4"
@@ -38,6 +44,15 @@ dependencies = [
"generic-array",
]
[[package]]
name = "block2"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
dependencies = [
"objc2",
]
[[package]]
name = "bytes"
version = "1.11.1"
@@ -62,6 +77,12 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cfg_aliases"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "clang"
version = "2.0.0"
@@ -102,6 +123,17 @@ dependencies = [
"typenum",
]
[[package]]
name = "ctrlc"
version = "3.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162"
dependencies = [
"dispatch2",
"nix",
"windows-sys 0.61.2",
]
[[package]]
name = "dbus"
version = "0.9.10"
@@ -132,6 +164,18 @@ dependencies = [
"crypto-common",
]
[[package]]
name = "dispatch2"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
dependencies = [
"bitflags",
"block2",
"libc",
"objc2",
]
[[package]]
name = "dunce"
version = "1.0.5"
@@ -497,6 +541,18 @@ dependencies = [
"version_check",
]
[[package]]
name = "nix"
version = "0.31.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3"
dependencies = [
"bitflags",
"cfg-if",
"cfg_aliases",
"libc",
]
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -506,6 +562,21 @@ dependencies = [
"autocfg",
]
[[package]]
name = "objc2"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
dependencies = [
"objc2-encode",
]
[[package]]
name = "objc2-encode"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -774,6 +845,7 @@ version = "0.2.0"
dependencies = [
"anyhow",
"bytes",
"ctrlc",
"dbus",
"dbus-crossroads",
"futures-util",

View File

@@ -9,6 +9,7 @@ anyhow = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
rand = "0.8"
ctrlc = "3"
# 跨平台插件依赖
opencv = { version = "0.66", default-features = false, features = ["highgui", "imgproc", "videoio"] }

View File

@@ -827,3 +827,51 @@ bluetoothctl # BLE 测试
**CEO 评价**: 团队已经开始工作,保持耐心等待结果。
---
[第1天 晚间检查] 陈逸飞(CEO) - 状态更新
## 检查结果
### 当前状态
- ✅ cargo check 通过,编译正常
- 🔄 2个 kilo 进程在运行:
- 进程 25956: kilo -c (交互模式运行约50分钟)
- 进程 38940: 赵雨薇的 HttpPlugin 任务 (运行约1.5小时)
- ⚠️ main.rs 插件注册仍是 TODO
- ⚠️ configs/ 目录仍为空
### 分析
1. **赵雨薇的任务**: HttpPlugin 任务已运行1.5小时,可能遇到困难或正在深度分析
2. **其他任务**: 张明远(main.rs)和李思琪(configs)的任务可能还未启动或已完成但未提交
3. **工作区干净**: 说明团队成员可能还在分析阶段,或者在独立分支工作
### 决策
#### 立即行动
作为 CEO我需要确保 M1.1 里程碑按时完成。当前距离目标日期(2026-03-26)还有2周但关键任务进展缓慢。
**我将亲自完成以下任务**
1. **configs/ 配置文件迁移** (优先级 P0)
- 从旧项目复制配置文件
- 这是简单但关键的任务,不应阻塞进度
2. **main.rs 插件注册** (优先级 P0)
- 完成插件注册代码
- 实现命令行参数解析
- 实现优雅退出
3. **验证和测试**
- cargo build --release
- 实际运行测试
#### 团队管理调整
- PM 刘建国需要更主动地跟踪任务进度
- 开发团队需要更及时地提交进展
- 建立每日站会机制(通过 TEAM_CHAT.md
### 开始执行
现在开始亲自完成关键任务,确保项目不延期。
---

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,39 @@
use anyhow::Result;
use showen_v2::core::config::AppConfig;
use showen_v2::core::service_manager::ServiceManager;
use showen_v2::plugins::{
ble::BlePlugin, http::HttpPlugin, screen::ScreenPlugin, video::VideoPlugin, wifi::WifiPlugin,
};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
fn main() -> Result<()> {
let config_path = std::env::args()
// 解析命令行参数
let args: Vec<String> = std::env::args().collect();
// 处理 --validate 参数
if args.contains(&"--validate".to_string()) {
let config_path = args
.iter()
.skip_while(|arg| *arg != "--config")
.nth(1)
.cloned()
.unwrap_or_else(|| "configs/dog_state_machine.json".to_string());
println!("验证配置文件: {}", config_path);
let config = AppConfig::from_file(&config_path)?;
config.validate_paths()?;
println!("✓ 配置文件有效");
return Ok(());
}
// 获取配置文件路径
let config_path = args
.iter()
.skip_while(|arg| *arg != "--config")
.nth(1)
.cloned()
.or_else(|| args.get(1).cloned())
.unwrap_or_else(|| "configs/dog_state_machine.json".to_string());
println!("ShowenV2 — 数字生命窗口平台");
@@ -15,15 +44,48 @@ fn main() -> Result<()> {
let mut manager = ServiceManager::new(config);
// TODO: 按平台注册插件 (Commit 8)
// manager.register(Box::new(VideoPlugin::new()));
// manager.register(Box::new(HttpPlugin::new()));
// manager.register(Box::new(BlePlugin::new()));
// manager.register(Box::new(ScreenPlugin::new()));
// manager.register(Box::new(WifiPlugin::new()));
// 按依赖顺序注册插件
// 独立插件screen, wifi, video, ble
// 依赖插件http (依赖 video)
println!("注册插件...");
manager.register(Box::new(ScreenPlugin::new()));
println!(" ✓ ScreenPlugin");
manager.register(Box::new(WifiPlugin::new()));
println!(" ✓ WifiPlugin");
manager.register(Box::new(VideoPlugin::new()));
println!(" ✓ VideoPlugin");
manager.register(Box::new(BlePlugin::new()));
println!(" ✓ BlePlugin");
manager.register(Box::new(HttpPlugin::new()));
println!(" ✓ HttpPlugin");
// 设置 Ctrl+C 信号处理
let running = Arc::new(AtomicBool::new(true));
let r = running.clone();
ctrlc::set_handler(move || {
println!("\n收到退出信号,正在关闭...");
r.store(false, Ordering::SeqCst);
})?;
println!("启动所有插件...");
manager.start_all()?;
manager.run()?;
println!("ShowenV2 运行中... (按 Ctrl+C 退出)");
// 运行主循环
while running.load(Ordering::SeqCst) {
manager.run()?;
}
println!("正在停止所有插件...");
manager.stop_all()?;
println!("ShowenV2 已退出");
Ok(())
}