feat: implement ConfigReloadRequest handler in ServiceManager

Complete the config hot-reload flow:
- ServiceManager receives ConfigReloadRequest from HTTP plugin
- Reloads config from source_path using AppConfig::from_file
- Updates internal config Arc
- Broadcasts ConfigReloaded(new_config) to all plugins
- Logs error on reload failure without crashing

This closes the P0 gap identified by architect Wang Siyuan:
the HTTP /api/config save endpoint promised hot-reload but
ServiceManager only had a TODO placeholder.

cargo check: 0 warnings, cargo test: 22/22 passed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
showen
2026-03-12 12:43:33 +08:00
parent 5af7fc18a5
commit 4edbd34797

View File

@@ -128,7 +128,17 @@ impl ServiceManager {
}
Message::ConfigReloadRequest => {
println!("[ServiceManager] 收到配置重载请求");
// TODO: 重载配置并广播 ConfigReloaded
match AppConfig::from_file(&self.config.source_path) {
Ok(new_config) => {
let new_config = Arc::new(new_config);
self.config = Arc::clone(&new_config);
println!("[ServiceManager] 配置重载成功,广播 ConfigReloaded");
self.broadcast_message(Message::ConfigReloaded(new_config));
}
Err(e) => {
eprintln!("[ServiceManager] 配置重载失败: {}", e);
}
}
}
Message::PluginReady(id) => {
println!("[ServiceManager] 插件 '{}' 就绪", id);