#![allow(missing_docs)]
use serde::{Deserialize, Serialize};
use std::net::{TcpListener, TcpStream};
use xuko_net::packet::*;
#[derive(Debug, Serialize, Deserialize)]
enum ExamplePacket {
GetHardcodedValue,
SendInfo(String),
}
const ADDRESS: &str = "127.0.0.1:30000";
fn main() -> Result<(), PacketError> {
let args = std::env::args().collect::<Vec<_>>();
if let Some(m) = args.get(1) {
match m.trim().to_lowercase().as_str() {
"server" => server(),
_ => client(),
}
} else {
client()
}?;
Ok(())
}
fn server() -> Result<(), PacketError> {
let listener = TcpListener::bind(ADDRESS)?;
while let Ok((mut stream, addr)) = listener.accept() {
println!("request from: {addr}");
let packet = chomp_packet(&mut stream)?;
println!("received packet: {packet}");
let parsed = Packet::<ExamplePacket>::deserialize(&packet)?.unwrap();
match parsed {
ExamplePacket::GetHardcodedValue => unreachable!(),
ExamplePacket::SendInfo(s) => println!("This is what the packet contained: {s}"),
}
}
Ok(())
}
fn client() -> Result<(), PacketError> {
let mut stream = TcpStream::connect(ADDRESS)?;
Packet::new(ExamplePacket::SendInfo("Hello!".to_string())).send(&mut stream)?;
Ok(())
}