send_multicast/
send_multicast.rs1use std::net::{Ipv4Addr, SocketAddr, UdpSocket};
8
9use ponk_protocol::{
10 DEFAULT_PORT, DataFormat, MULTICAST_ADDR, PonkFrame, PonkPath, PonkPoint, encode_datagrams,
11};
12
13const MAX_DATAGRAM_LEN: usize = 1_472;
15
16fn main() -> std::io::Result<()> {
17 let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, 0))?;
18 socket.set_multicast_ttl_v4(1)?;
19 socket.set_multicast_loop_v4(true)?;
20
21 let target = SocketAddr::from((MULTICAST_ADDR, DEFAULT_PORT));
22
23 let frame = PonkFrame {
25 sender_id: 0xC0FFEE,
26 sender_name: "send-multicast-example".to_string(),
27 frame_number: 0,
28 paths: vec![PonkPath {
29 metadata: vec![],
30 points: [
31 (-0.5, -0.5),
32 (0.5, -0.5),
33 (0.5, 0.5),
34 (-0.5, 0.5),
35 (-0.5, -0.5),
36 ]
37 .into_iter()
38 .map(|(x, y)| PonkPoint {
39 x,
40 y,
41 rgb: [0, 255, 255],
42 })
43 .collect(),
44 }],
45 };
46
47 let datagrams = encode_datagrams(&frame, DataFormat::XyF32RgbU8, MAX_DATAGRAM_LEN)
48 .expect("frame should encode");
49
50 for datagram in &datagrams {
51 socket.send_to(datagram, target)?;
52 }
53 println!(
54 "sent {} datagram(s) to {} (multicast group {:?})",
55 datagrams.len(),
56 target,
57 MULTICAST_ADDR,
58 );
59 Ok(())
60}