use futures_util::StreamExt;
use ai_cortex_sdk::{CortexClient, CortexConfig};
#[tokio::main]
async fn main() {
let server_url =
std::env::var("CORTEX_SERVER_URL").unwrap_or_else(|_| "http://localhost:40404".into());
let pat = std::env::args()
.nth(1)
.or_else(|| std::env::var("CORTEX_PAT").ok())
.unwrap_or_else(|| "REPLACE_WITH_YOUR_PAT".to_string());
let software_id = std::env::args()
.nth(2)
.or_else(|| std::env::var("CORTEX_SOFTWARE_ID").ok())
.unwrap_or_else(|| "00000000-0000-0000-0000-000000000000".to_string());
let demo_stream = std::env::args().nth(3).is_some();
let config = CortexConfig::new(&server_url, &pat, &software_id).without_heartbeat();
let client = CortexClient::new(config);
println!("=== Check Update (Pull) ===");
let platform = std::env::consts::OS; let current_version = "1.0.0";
match client
.check_update(platform, current_version, None)
.await
{
Ok(info) => {
println!("current_version : {}", info.current_version);
println!("has_update : {}", info.has_update);
println!("force_update : {}", info.force_update);
if let Some(t) = &info.target_version {
println!("target_version : {} (channel={}, size={} bytes)", t.version, t.channel, t.file_size);
println!("release_notes : {}", t.release_notes);
println!("min_compatible : {}", t.min_compatible);
}
if info.has_update && info.force_update {
println!("\n>>> 强制更新:当前版本被阻塞,必须升级后才能继续。");
}
}
Err(e) => eprintln!("check_update failed: {e}"),
}
if demo_stream {
println!("\n=== Update Events (Push / SSE) ===");
match client.open_update_events(Some(&software_id), None).await {
Ok(mut stream) => {
println!("SSE connected. Waiting for events (will print 3 then exit)...");
let mut count = 0usize;
while let Some(ev) = stream.next().await {
match ev {
Ok(e) => {
println!(
"event #{}: software={} version={} platform={} channel={} force={}",
e.id, e.software_id, e.version, e.platform, e.channel, e.force_update
);
count += 1;
if count >= 3 {
println!("Received 3 events, exiting demo.");
break;
}
}
Err(e) => {
eprintln!("stream error: {e}");
break;
}
}
}
}
Err(e) => eprintln!("open_update_events failed: {e}"),
}
}
}