1use std::time::Duration;
6
7use cmppprotocol::{CmppConfig, CmppConnection, CmppProtocolParams, Event, SubmitOptions};
8
9#[tokio::main]
10async fn main() -> cmppprotocol::Result<()> {
11 let args: Vec<String> = std::env::args().collect();
12 if args.len() < 7 {
13 eprintln!("用法: send_sms <host> <port> <account> <password> <dest> <text>");
14 std::process::exit(2);
15 }
16 let (host, port, account, password, dest, text) = (
17 args[1].clone(),
18 args[2].parse::<i32>().expect("端口"),
19 args[3].clone(),
20 args[4].clone(),
21 args[5].clone(),
22 args[6].clone(),
23 );
24
25 let config = CmppConfig {
26 host,
27 port,
28 account: account.clone(),
29 password,
30 version: cmppprotocol::CMPP_VERSION_20,
31 protocol_params: CmppProtocolParams::default(),
32 };
33
34 let conn = CmppConnection::connect(config).await?;
35 println!("已连接并登录");
36
37 if let Some(mut events) = conn.take_events().await {
38 tokio::spawn(async move {
39 while let Some(event) = events.recv().await {
40 match event {
41 Event::SubmitResp {
42 sequence_id,
43 msg_id,
44 result,
45 } => {
46 println!(
47 "响应 seq={} msg_id={} result={}",
48 sequence_id,
49 Event::msg_id_hex(&msg_id),
50 result
51 );
52 }
53 Event::SubmitTimeout { sequence_id } => {
54 println!("submit 超时 seq={}", sequence_id)
55 }
56 Event::Deliver(deliver) => match deliver.report() {
57 Some(report) => {
58 println!("status report {} -> {}", report.msg_id_hex(), report.stat)
59 }
60 None => println!("来自 {} 的 MO message", deliver.src_terminal_id),
61 },
62 Event::Disconnected(e) => {
63 println!("connection 已断开: {}", e);
64 break;
65 }
66 }
67 }
68 });
69 }
70
71 let opts = SubmitOptions::new("SVC", &account, "10690001", &dest);
72 let seq_ids = conn.submit(&opts, &text, None).await?;
73 println!("已提交 {} 个 segment: {:?}", seq_ids.len(), seq_ids);
74
75 tokio::time::sleep(Duration::from_secs(5)).await;
77 conn.close().await;
78 Ok(())
79}