// use victorem; fn main() -> Result<(), victorem::Exception> { // , 11111 127.0.0.1:22222 let mut socket = victorem::ClientSocket::new("11111", "127.0.0.1:22222")?; loop { // socket.send(b"Client!".to_vec()); // . socket.recv().map(|v| String::from_utf8(v).map(|s| println!("{}",s))); } }
// use victorem; use std::time::Duration; use std::net::SocketAddr; //, . . struct ClientServerGame; // Game, impl victorem::Game for ClientServerGame { //, . false, . fn handle_command(&mut self, delta_time: Duration, commands: Vec<Vec<u8>>, from: SocketAddr) -> bool { for command in commands { String::from_utf8(command).map(|s| println!("{}",s)); } true } // 30 . , . , . fn draw(&mut self, delta_time: Duration) -> Vec<u8> { b"Server!".to_vec() } } fn main() -> Result<(), victorem::Exception> { // , ClientServerGame 22222 let mut server = victorem::GameServer::new(ClientServerGame, "22222")?; // . server.run(); Ok(()) }
// u32 , 0 - , 1 - , . pub fn get_lost(&self) -> (u32, u32) { let mut sequence: u32 = 0; let mut x = 0; let mut y = self.last_received_packet_id; while x < 32 && y > 1 { y -= 1; if !self.received.contains(&y) { let mask = 1u32 << x; sequence |= mask; } x += 1; } (sequence, self.last_received_packet_id) }
// (max_id) (sequence) . fn get_lost(&mut self, max_id: u32, sequence: u32) -> Vec<CommandPacket> { let mut x = max_id; let mut y = 0; let mut ids = Vec::<u32>::new(); // , , , . let max_cached = self.cache.get_max_id(); if max_cached != max_id { ids.push(max_cached); } while x > 0 && y < 32 { x -= 1; let mask = 1u32 << y; y += 1; let res = sequence & mask; if res > 0 { ids.push(x); } } self.cache.get_range(&ids) }
fn add_one(x:usize) -> usize { x+1 } #[test] fn add_one_fn_should_add_one_to_it_argument(){ let x = 2; let expected = x+1; ///////////////////////// let result = add_one(x); ////////////////////////////////// assert_eq!(expected,result); }
Source: https://habr.com/ru/post/435384/
All Articles