comparison src/bin/server.rs @ 19:ba09079686a0

Add support for different endianness between client and server.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 26 Aug 2021 23:43:36 +0200
parents 3f7b7a3ad8fe
children
comparison
equal deleted inserted replaced
18:3f7b7a3ad8fe 19:ba09079686a0
41 41
42 let socket = UdpSocket::bind(address)?; 42 let socket = UdpSocket::bind(address)?;
43 println!("Listening on {:?}", socket); 43 println!("Listening on {:?}", socket);
44 println!("Here is an example client: https://hg.linkmauve.fr/remote-gamepad"); 44 println!("Here is an example client: https://hg.linkmauve.fr/remote-gamepad");
45 45
46 let mut event: Event = Default::default();
47 let mut last = Some((0., 0.)); 46 let mut last = Some((0., 0.));
48 state.set_size(320, 240); 47 state.set_size(320, 240);
49 loop { 48 loop {
50 // TODO: Yolo-alignment. 49 let mut buf: [u8; 16] = Default::default();
51 let buf: &mut [u8; 16] = unsafe { std::mem::transmute(&mut event) }; 50 let (amount, source) = socket.recv_from(&mut buf)?;
52 let (amount, source) = socket.recv_from(buf)?;
53 if amount != std::mem::size_of::<Event>() { 51 if amount != std::mem::size_of::<Event>() {
54 eprintln!("Invalid data length: {}", amount); 52 eprintln!("Invalid data length: {}", amount);
55 continue; 53 continue;
56 } 54 }
55 let event: Event = bincode::deserialize(&buf).unwrap();
57 println!("{:?} from {:?}", event, source); 56 println!("{:?} from {:?}", event, source);
58 if event.buttons.contains(Buttons::A) { 57 if event.buttons.contains(Buttons::A) {
59 state.select_tool(Key::ButtonToolPen); 58 state.select_tool(Key::ButtonToolPen);
60 } else if event.buttons.contains(Buttons::B) { 59 } else if event.buttons.contains(Buttons::B) {
61 state.select_tool(Key::ButtonToolRubber); 60 state.select_tool(Key::ButtonToolRubber);