1use someip_rs::transport::TcpClient;
10use someip_rs::{ClientId, MethodId, ServiceId, SomeIpMessage};
11use std::time::Duration;
12
13const SERVICE_ID: u16 = 0x1234;
14const METHOD_ECHO: u16 = 0x0001;
15const METHOD_GREET: u16 = 0x0002;
16const SERVER_ADDR: &str = "127.0.0.1:30490";
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19 println!("Connecting to SOME/IP server at {SERVER_ADDR}...");
20
21 let mut client = TcpClient::connect(SERVER_ADDR)?;
22 client.set_client_id(ClientId(0x0100));
23 client.set_read_timeout(Some(Duration::from_secs(5)))?;
24
25 println!("Connected!");
26
27 println!("\n--- Example 1: Echo Request ---");
29 let request = SomeIpMessage::request(ServiceId(SERVICE_ID), MethodId(METHOD_ECHO))
30 .payload(b"Hello, SOME/IP!".as_slice())
31 .build();
32
33 println!(
34 "Sending request: service={}, method={}, payload={:?}",
35 request.header.service_id,
36 request.header.method_id,
37 String::from_utf8_lossy(&request.payload)
38 );
39
40 let response = client.call(request)?;
41 println!(
42 "Received response: return_code={:?}, payload={:?}",
43 response.header.return_code,
44 String::from_utf8_lossy(&response.payload)
45 );
46
47 println!("\n--- Example 2: Multiple Requests ---");
49 for i in 1..=3 {
50 let payload = format!("Message #{i}");
51 let request = SomeIpMessage::request(ServiceId(SERVICE_ID), MethodId(METHOD_GREET))
52 .payload(payload.as_bytes().to_vec())
53 .build();
54
55 println!("Request {i}: session_id={}", request.header.session_id);
56 let response = client.call(request)?;
57 println!(
58 "Response {i}: session_id={}, payload={:?}",
59 response.header.session_id,
60 String::from_utf8_lossy(&response.payload)
61 );
62 }
63
64 println!("\n--- Example 3: Fire-and-Forget ---");
66 let notification =
67 SomeIpMessage::request_no_return(ServiceId(SERVICE_ID), MethodId(METHOD_ECHO))
68 .payload(b"This is a notification".as_slice())
69 .build();
70
71 println!("Sending notification (no response expected)...");
72 client.send(notification)?;
73 println!("Notification sent!");
74
75 println!("\nDone!");
76 Ok(())
77}