packet_sync/
packet_sync.rs1#![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}