auto_update/
auto_update.rs1use futures_util::StreamExt;
2
3use ai_cortex_sdk::{CortexClient, CortexConfig};
4
5#[tokio::main]
13async fn main() {
14 let server_url =
15 std::env::var("CORTEX_SERVER_URL").unwrap_or_else(|_| "http://localhost:40404".into());
16 let pat = std::env::args()
17 .nth(1)
18 .or_else(|| std::env::var("CORTEX_PAT").ok())
19 .unwrap_or_else(|| "REPLACE_WITH_YOUR_PAT".to_string());
20 let software_id = std::env::args()
21 .nth(2)
22 .or_else(|| std::env::var("CORTEX_SOFTWARE_ID").ok())
23 .unwrap_or_else(|| "00000000-0000-0000-0000-000000000000".to_string());
24 let demo_stream = std::env::args().nth(3).is_some();
26
27 let config = CortexConfig::new(&server_url, &pat, &software_id).without_heartbeat();
29 let client = CortexClient::new(config);
30
31 println!("=== Check Update (Pull) ===");
33 let platform = std::env::consts::OS; let current_version = "1.0.0";
35 match client
36 .check_update(platform, current_version, None)
37 .await
38 {
39 Ok(info) => {
40 println!("current_version : {}", info.current_version);
41 println!("has_update : {}", info.has_update);
42 println!("force_update : {}", info.force_update);
43 if let Some(t) = &info.target_version {
44 println!("target_version : {} (channel={}, size={} bytes)", t.version, t.channel, t.file_size);
45 println!("release_notes : {}", t.release_notes);
46 println!("min_compatible : {}", t.min_compatible);
47 }
48 if info.has_update && info.force_update {
50 println!("\n>>> 强制更新:当前版本被阻塞,必须升级后才能继续。");
51 }
52 }
53 Err(e) => eprintln!("check_update failed: {e}"),
54 }
55
56 if demo_stream {
58 println!("\n=== Update Events (Push / SSE) ===");
59 match client.open_update_events(Some(&software_id), None).await {
60 Ok(mut stream) => {
61 println!("SSE connected. Waiting for events (will print 3 then exit)...");
62 let mut count = 0usize;
63 while let Some(ev) = stream.next().await {
64 match ev {
65 Ok(e) => {
66 println!(
67 "event #{}: software={} version={} platform={} channel={} force={}",
68 e.id, e.software_id, e.version, e.platform, e.channel, e.force_update
69 );
70 count += 1;
71 if count >= 3 {
72 println!("Received 3 events, exiting demo.");
73 break;
74 }
75 }
76 Err(e) => {
77 eprintln!("stream error: {e}");
78 break;
79 }
80 }
81 }
82 }
83 Err(e) => eprintln!("open_update_events failed: {e}"),
84 }
85 }
86}