Skip to main content

packet_sync/
packet_sync.rs

1#![allow(missing_docs)]
2use serde::{Deserialize, Serialize};
3use std::net::{TcpListener, TcpStream};
4use xuko_net::packet::*;
5
6#[derive(Debug, Serialize, Deserialize)]
7enum ExamplePacket {
8    GetHardcodedValue,
9    SendInfo(String),
10}
11
12const ADDRESS: &str = "127.0.0.1:30000";
13
14fn main() -> Result<(), PacketError> {
15    let args = std::env::args().collect::<Vec<_>>();
16
17    if let Some(m) = args.get(1) {
18        match m.trim().to_lowercase().as_str() {
19            "server" => server(),
20            _ => client(),
21        }
22    } else {
23        client()
24    }?;
25
26    Ok(())
27}
28
29fn server() -> Result<(), PacketError> {
30    let listener = TcpListener::bind(ADDRESS)?;
31
32    while let Ok((mut stream, addr)) = listener.accept() {
33        println!("request from: {addr}");
34
35        let packet = chomp_packet(&mut stream)?;
36        println!("received packet: {packet}");
37
38        let parsed = Packet::<ExamplePacket>::deserialize(&packet)?.unwrap();
39
40        match parsed {
41            ExamplePacket::GetHardcodedValue => unreachable!(),
42            ExamplePacket::SendInfo(s) => println!("This is what the packet contained: {s}"),
43        }
44    }
45
46    Ok(())
47}
48
49fn client() -> Result<(), PacketError> {
50    let mut stream = TcpStream::connect(ADDRESS)?;
51
52    Packet::new(ExamplePacket::SendInfo("Hello!".to_string())).send(&mut stream)?;
53
54    Ok(())
55}