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:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -2706,9 +2706,7 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "literustlib"
|
name = "literustlib"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c053853b6b4fbb6907900433ec84772b464088a2c8c508e95e05998800d01d42"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"num_enum 0.7.6",
|
"num_enum 0.7.6",
|
||||||
@@ -2716,9 +2714,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "literustlib_server"
|
name = "literustlib_server"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dab424002ff8523d212b08ccc5db462d797ca51bd7cca820329e173881e5fa71"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-recursion",
|
"async-recursion",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ num-quaternion.workspace = true
|
|||||||
rand.workspace = true
|
rand.workspace = true
|
||||||
git-version.workspace = true
|
git-version.workspace = true
|
||||||
|
|
||||||
#literustlib_server = { version = "0.4", path = "../../LiteRustLib/server" }
|
literustlib_server = { version = "0.5", path = "../../LiteRustLib/server" }
|
||||||
#literustlib = { version = "0.4", path = "../../LiteRustLib" }
|
literustlib = { version = "0.5", path = "../../LiteRustLib" }
|
||||||
literustlib_server = { version = "0.4" }
|
#literustlib_server = { version = "0.4" }
|
||||||
literustlib = { version = "0.4" }
|
#literustlib = { version = "0.4" }
|
||||||
rlnl = { version = "0.1", path = "../../rlnl" }
|
rlnl = { version = "0.1", path = "../../rlnl" }
|
||||||
|
|
||||||
oj_serdes.workspace = true
|
oj_serdes.workspace = true
|
||||||
|
|||||||
@@ -1298,6 +1298,12 @@ impl BattleArenaLogic {
|
|||||||
};
|
};
|
||||||
if let Some(player_desc) = generic.user_descriptor(player_id) {
|
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 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(
|
tokio::task::spawn(super::respawn_player_after(
|
||||||
respawn_timestamp,
|
respawn_timestamp,
|
||||||
connections,
|
connections,
|
||||||
@@ -1305,6 +1311,7 @@ impl BattleArenaLogic {
|
|||||||
Some(self.map_center.clone()),
|
Some(self.map_center.clone()),
|
||||||
player_id,
|
player_id,
|
||||||
player_desc.machine.is_alive.clone(),
|
player_desc.machine.is_alive.clone(),
|
||||||
|
my_connection_latency,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ pub use team_death_match::TeamDeathMatchLogic;
|
|||||||
|
|
||||||
pub(super) mod trackers;
|
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>) {
|
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");
|
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;
|
tokio::time::sleep(sleep_dur).await;
|
||||||
let spawn_payload = rlnl::events::sync::SpawnPoint {
|
let spawn_payload = rlnl::events::sync::SpawnPoint {
|
||||||
pos: rlnl::types::PosQuatPair {
|
pos: rlnl::types::PosQuatPair {
|
||||||
|
|||||||
@@ -368,6 +368,12 @@ impl PitLogic {
|
|||||||
).await;
|
).await;
|
||||||
let spawn_point = Self::choose_spawn_point(&generic.map_config, player_id).1;
|
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 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(
|
tokio::task::spawn(super::respawn_player_after(
|
||||||
respawn_timestamp,
|
respawn_timestamp,
|
||||||
connections,
|
connections,
|
||||||
@@ -375,6 +381,7 @@ impl PitLogic {
|
|||||||
Some(self.map_center.clone()),
|
Some(self.map_center.clone()),
|
||||||
player_id,
|
player_id,
|
||||||
player_desc.machine.is_alive.clone(),
|
player_desc.machine.is_alive.clone(),
|
||||||
|
my_connection_latency,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,6 +307,12 @@ impl TeamDeathMatchLogic {
|
|||||||
};
|
};
|
||||||
if let Some(player_desc) = generic.user_descriptor(player_id) {
|
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 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(
|
tokio::task::spawn(super::respawn_player_after(
|
||||||
respawn_timestamp,
|
respawn_timestamp,
|
||||||
connections,
|
connections,
|
||||||
@@ -314,6 +320,7 @@ impl TeamDeathMatchLogic {
|
|||||||
Some(self.map_center.clone()),
|
Some(self.map_center.clone()),
|
||||||
player_id,
|
player_id,
|
||||||
player_desc.machine.is_alive.clone(),
|
player_desc.machine.is_alive.clone(),
|
||||||
|
my_connection_latency,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
||||||
|
|||||||
Reference in New Issue
Block a user