Created
August 11, 2021 11:43
-
-
Save FredrikNoren/44cc2643a705571e699d06f8eb843b96 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Client code: | |
let mut buff = [0; 65000]; | |
log::info!("Handshaking"); | |
let (mut send, mut recv) = connection.connection.open_bi().await.unwrap(); | |
send.write_all(b"hello").await.unwrap(); | |
recv.read(&mut buff).await.unwrap(); // Discard hello message | |
log::info!("Synchronizing time"); | |
let time = Instant::now(); | |
send.write_all(b"req-time").await.unwrap(); | |
log::info!("Waiting for server time"); | |
let size = recv.read(&mut buff).await.unwrap().unwrap(); | |
let roundtrip = time.elapsed(); | |
let msg: MsgRespTime = bincode::deserialize(&buff[0..size]).unwrap(); | |
log::info!("Got server time: {}", msg.server_time_ms); | |
let local_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_millis(); | |
let server_time = msg.server_time_ms + roundtrip.as_millis() / 2; | |
let server_time_offset = (server_time as i128 - local_time as i128) as i64; | |
log::info!("Server time offset: {} ms", server_time_offset); | |
log::info!("Receiving game state snapshot"); | |
let size = recv.read(&mut buff).await.unwrap().unwrap(); | |
let msg: MsgConnected = bincode::deserialize(&buff[0..size]).unwrap(); | |
Server code: | |
log::info!("[{}] Handshaking", self_player_id); | |
let (mut send, mut recv) = connection.bi_streams.next().await.unwrap().unwrap(); | |
send.write_all(b"hello").await.unwrap(); | |
recv.read(&mut buff).await.unwrap(); // Discard hello message | |
log::info!("[{}] Synchronizing time", self_player_id); | |
recv.read(&mut buff).await.unwrap(); // Discard req time message | |
log::info!("[{}] Sending time", self_player_id); | |
let local_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_millis(); | |
send.write_all(&bincode::serialize(&MsgRespTime { server_time_ms: local_time }).unwrap()).await.unwrap(); | |
log::info!("[{}] Sending game state snapshot", self_player_id); | |
let msg = bincode::serialize(&MsgConnected { | |
self_player_id: self_player_id.clone(), | |
game_state: game_states_snapshot | |
}).unwrap(); | |
send.write_all(&msg).await.unwrap(); | |
send.finish().await.unwrap(); | |
log::info!("[{}] Connected message sent", self_player_id); | |
Client output: | |
[2021-08-11T11:42:25Z INFO forge] Handshaking | |
[2021-08-11T11:42:25Z INFO forge] Synchronizing time | |
[2021-08-11T11:42:25Z INFO forge] Waiting for server time | |
[2021-08-11T11:42:25Z INFO forge] Got server time: 1628682145397 | |
[2021-08-11T11:42:25Z INFO forge] Server time offset: 0 ms | |
[2021-08-11T11:42:25Z INFO forge] Receiving game state snapshot | |
thread 'tokio-runtime-worker' panicked at 'called `Option::unwrap()` on a `None` value', forge/src/main.rs:219:56 | |
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace | |
Server output: | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Connected 127.0.0.1:18009 | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Handshaking | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Synchronizing time | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Sending time | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Sending game state snapshot | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Connected message sent | |
[2021-08-11T11:42:25Z INFO forge_server] [0] Creating streams |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment