Skip to main content

encode_datagrams

Function encode_datagrams 

Source
pub fn encode_datagrams(
    frame: &PonkFrame,
    data_format: DataFormat,
    max_datagram_len: usize,
) -> Result<Vec<Vec<u8>>, PonkError>
Examples found in repository?
examples/roundtrip.rs (line 35)
9fn main() {
10    let frame = PonkFrame {
11        sender_id: 1,
12        sender_name: "roundtrip-example".to_string(),
13        frame_number: 0,
14        paths: vec![PonkPath {
15            metadata: vec![PonkMetadata {
16                key: "PATHNUMB".to_string(),
17                value: 0.0,
18            }],
19            points: vec![
20                PonkPoint {
21                    x: -0.5,
22                    y: -0.5,
23                    rgb: [255, 0, 0],
24                },
25                PonkPoint {
26                    x: 0.5,
27                    y: 0.5,
28                    rgb: [0, 255, 0],
29                },
30            ],
31        }],
32    };
33
34    let datagrams =
35        encode_datagrams(&frame, DataFormat::XyF32RgbU8, 1200).expect("frame should encode");
36    println!("encoded into {} datagram(s)", datagrams.len());
37
38    let decoded = decode_datagram(&datagrams[0])
39        .expect("valid datagram")
40        .expect("single-chunk frame");
41
42    println!(
43        "decoded frame from '{}' with {} path(s), {} point(s)",
44        decoded.sender_name,
45        decoded.paths.len(),
46        decoded.paths[0].points.len(),
47    );
48    assert_eq!(decoded.paths[0].points, frame.paths[0].points);
49    println!("roundtrip ok");
50}
More examples
Hide additional examples
examples/send_multicast.rs (line 47)
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    // A square drawn as one path.
24    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}