1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Factor in connection latency when respawning player, bump LiteRustLib (with fix #143)

This commit is contained in:
NG (Graham)
2026-08-09 15:27:16 -04:00
parent 7147df2a9c
commit 961190a467
6 changed files with 29 additions and 12 deletions

8
Cargo.lock generated
View File

@@ -2706,9 +2706,7 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
[[package]]
name = "literustlib"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c053853b6b4fbb6907900433ec84772b464088a2c8c508e95e05998800d01d42"
version = "0.5.0"
dependencies = [
"bytes",
"num_enum 0.7.6",
@@ -2716,9 +2714,7 @@ dependencies = [
[[package]]
name = "literustlib_server"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dab424002ff8523d212b08ccc5db462d797ca51bd7cca820329e173881e5fa71"
version = "0.5.0"
dependencies = [
"async-recursion",
"async-trait",

View File

@@ -22,10 +22,10 @@ num-quaternion.workspace = true
rand.workspace = true
git-version.workspace = true
#literustlib_server = { version = "0.4", path = "../../LiteRustLib/server" }
#literustlib = { version = "0.4", path = "../../LiteRustLib" }
literustlib_server = { version = "0.4" }
literustlib = { version = "0.4" }
literustlib_server = { version = "0.5", path = "../../LiteRustLib/server" }
literustlib = { version = "0.5", path = "../../LiteRustLib" }
#literustlib_server = { version = "0.4" }
#literustlib = { version = "0.4" }
rlnl = { version = "0.1", path = "../../rlnl" }
oj_serdes.workspace = true

View File

@@ -1298,6 +1298,12 @@ impl BattleArenaLogic {
};
if let Some(player_desc) = generic.user_descriptor(player_id) {
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
let my_connection_latency = generic.users.read().await
.iter()
.filter(|(user_player_id, _)| **user_player_id == player_id)
.next()
.unwrap()
.1.connection.connection.latency();
tokio::task::spawn(super::respawn_player_after(
respawn_timestamp,
connections,
@@ -1305,6 +1311,7 @@ impl BattleArenaLogic {
Some(self.map_center.clone()),
player_id,
player_desc.machine.is_alive.clone(),
my_connection_latency,
));
} else {
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);

View File

@@ -16,8 +16,8 @@ pub use team_death_match::TeamDeathMatchLogic;
pub(super) mod trackers;
async fn respawn_player_after(after: chrono::DateTime<chrono::Utc>, players: Vec<crate::matches::generic::UserSender>, spawn: oj_rc_core::persist::config::Point, looking_at: Option<oj_rc_core::persist::config::Point>, player_id: u8, alive_flag: std::sync::Arc<std::sync::atomic::AtomicBool>) {
let sleep_dur = after.signed_duration_since(chrono::Utc::now()).to_std().expect("Respawn duration too long to sleep");
async fn respawn_player_after(after: chrono::DateTime<chrono::Utc>, players: Vec<crate::matches::generic::UserSender>, spawn: oj_rc_core::persist::config::Point, looking_at: Option<oj_rc_core::persist::config::Point>, player_id: u8, alive_flag: std::sync::Arc<std::sync::atomic::AtomicBool>, player_latency: std::time::Duration) {
let sleep_dur = after.signed_duration_since(chrono::Utc::now()).to_std().expect("Respawn duration too long to sleep") - player_latency;
tokio::time::sleep(sleep_dur).await;
let spawn_payload = rlnl::events::sync::SpawnPoint {
pos: rlnl::types::PosQuatPair {

View File

@@ -368,6 +368,12 @@ impl PitLogic {
).await;
let spawn_point = Self::choose_spawn_point(&generic.map_config, player_id).1;
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
let my_connection_latency = generic.users.read().await
.iter()
.filter(|(user_player_id, _)| **user_player_id == player_id)
.next()
.unwrap()
.1.connection.connection.latency();
tokio::task::spawn(super::respawn_player_after(
respawn_timestamp,
connections,
@@ -375,6 +381,7 @@ impl PitLogic {
Some(self.map_center.clone()),
player_id,
player_desc.machine.is_alive.clone(),
my_connection_latency,
));
}
}

View File

@@ -307,6 +307,12 @@ impl TeamDeathMatchLogic {
};
if let Some(player_desc) = generic.user_descriptor(player_id) {
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
let my_connection_latency = generic.users.read().await
.iter()
.filter(|(user_player_id, _)| **user_player_id == player_id)
.next()
.unwrap()
.1.connection.connection.latency();
tokio::task::spawn(super::respawn_player_after(
respawn_timestamp,
connections,
@@ -314,6 +320,7 @@ impl TeamDeathMatchLogic {
Some(self.map_center.clone()),
player_id,
player_desc.machine.is_alive.clone(),
my_connection_latency,
));
} else {
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);