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

Make match loading forcefully advanced after a time

This commit is contained in:
NG (Graham)
2026-01-25 18:17:34 -05:00
parent a5ebe4284b
commit a346299de8
17 changed files with 391 additions and 52 deletions

View File

@@ -55,17 +55,18 @@ pub struct QueueHandler {
cpu_counter: std::sync::Arc<oj_rc_core::cubes::CpuListParser>,
weapon_guesser: std::sync::Arc<oj_rc_core::cubes::WeaponListParser>,
change_strategy: GamemodeChangeStrategy,
autostart_after: std::time::Duration,
autostart_after: Option<std::time::Duration>,
autostart_task_started: std::sync::atomic::AtomicBool,
}
impl QueueHandler {
pub fn new(conf: &oj_rc_core::ConfigImpl, game_host: &str, factory: std::sync::Arc<oj_rc_core::factory::Factory>, cpu_counter: std::sync::Arc<oj_rc_core::cubes::CpuListParser>, weapon_guesser: std::sync::Arc<oj_rc_core::cubes::WeaponListParser>,) -> Self {
let (domain, port_str) = game_host.split_once(':').expect("Invalid redirect address (must be domain:port)");
let mp_settings = oj_rc_core::ConfigProvider::<()>::multiplayer_settings(conf);
Self {
users_in_queue: std::sync::Arc::new(tokio::sync::Mutex::new(HashMap::new())),
users_per_game: oj_rc_core::ConfigProvider::<()>::players_per_game(conf),
is_enabled: oj_rc_core::ConfigProvider::<()>::is_multiplayer_enabled(conf),
is_enabled: mp_settings.is_enabled,
hostname: domain.to_owned(),
hostport: port_str.parse().expect("Invalid redirect port"),
network_conf: crate::data::network::NetworkConfigData::from_conf(oj_rc_core::ConfigProvider::<()>::network_config(conf)),
@@ -73,13 +74,13 @@ impl QueueHandler {
cpu_counter,
weapon_guesser,
change_strategy: GamemodeChangeStrategy::from_core(<oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::server_config(conf).queue_mode),
autostart_after: oj_rc_core::ConfigProvider::<()>::multiplayer_autostart_after(conf),
autostart_after: mp_settings.lobby_autostart_after,
autostart_task_started: std::sync::atomic::AtomicBool::new(false),
}
}
fn ensure_autostart_task_running(&self) {
if self.autostart_task_started.swap(true, std::sync::atomic::Ordering::AcqRel) {
if self.autostart_task_started.swap(true, std::sync::atomic::Ordering::AcqRel) || self.autostart_after.is_none() {
return;
}
@@ -91,7 +92,7 @@ impl QueueHandler {
let factory = self.factory.clone();
let cpu_counter = self.cpu_counter.clone();
let weapon_guesser = self.weapon_guesser.clone();
let autostart_after = self.autostart_after;
let autostart_after = self.autostart_after.unwrap();
tokio::spawn(async move {
loop {