mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
add checkbox to not let more players join
This commit is contained in:
parent
2fc0e76f2c
commit
e355a41fe0
2 changed files with 27 additions and 1 deletions
|
@ -1196,6 +1196,10 @@ impl eframe::App for App {
|
||||||
if ui.button(tr("netman_show_settings")).clicked() {
|
if ui.button(tr("netman_show_settings")).clicked() {
|
||||||
self.show_settings = true;
|
self.show_settings = true;
|
||||||
}
|
}
|
||||||
|
let mut temp = netman.no_more_players.load(Ordering::Relaxed);
|
||||||
|
if ui.checkbox(&mut temp, "don't let more players join").changed() {
|
||||||
|
netman.no_more_players.store(temp, Ordering::Relaxed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ui.add_space(15.0);
|
ui.add_space(15.0);
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ use proxy_opt::ProxyOpt;
|
||||||
use socket2::{Domain, Socket, Type};
|
use socket2::{Domain, Socket, Type};
|
||||||
use std::fs::{create_dir, remove_dir_all, File};
|
use std::fs::{create_dir, remove_dir_all, File};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::atomic::AtomicI32;
|
use std::sync::atomic::{AtomicI32, Ordering};
|
||||||
use std::{
|
use std::{
|
||||||
env,
|
env,
|
||||||
fmt::Display,
|
fmt::Display,
|
||||||
|
@ -130,6 +130,7 @@ pub struct NetManager {
|
||||||
pub ban_list: Mutex<Vec<OmniPeerId>>,
|
pub ban_list: Mutex<Vec<OmniPeerId>>,
|
||||||
pub kick_list: Mutex<Vec<OmniPeerId>>,
|
pub kick_list: Mutex<Vec<OmniPeerId>>,
|
||||||
pub no_more_players: AtomicBool,
|
pub no_more_players: AtomicBool,
|
||||||
|
dont_kick: Mutex<Vec<OmniPeerId>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NetManager {
|
impl NetManager {
|
||||||
|
@ -153,6 +154,7 @@ impl NetManager {
|
||||||
ban_list: Default::default(),
|
ban_list: Default::default(),
|
||||||
kick_list: Default::default(),
|
kick_list: Default::default(),
|
||||||
no_more_players: AtomicBool::new(false),
|
no_more_players: AtomicBool::new(false),
|
||||||
|
dont_kick: Default::default(),
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
@ -283,6 +285,26 @@ impl NetManager {
|
||||||
warn!("Websocket flush not ok: {err}");
|
warn!("Websocket flush not ok: {err}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let mut dont_kick = self.dont_kick.lock().unwrap();
|
||||||
|
if self.no_more_players.load(Ordering::Relaxed) {
|
||||||
|
if dont_kick.is_empty() {
|
||||||
|
dont_kick.extend(self.peer.iter_peer_ids())
|
||||||
|
} else {
|
||||||
|
for peer in self.peer.iter_peer_ids() {
|
||||||
|
if !dont_kick.contains(&peer) {
|
||||||
|
state.try_ws_write(ws_encode_proxy("leave", peer.as_hex()));
|
||||||
|
state.world.handle_peer_left(peer);
|
||||||
|
self.send(peer, &NetMsg::Kick, Reliability::Reliable);
|
||||||
|
self.broadcast(
|
||||||
|
&NetMsg::PeerDisconnected { id: peer },
|
||||||
|
Reliability::Reliable,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dont_kick.clear()
|
||||||
|
}
|
||||||
let mut list = self.kick_list.lock().unwrap();
|
let mut list = self.kick_list.lock().unwrap();
|
||||||
for peer in list.iter() {
|
for peer in list.iter() {
|
||||||
info!("player kicked: {}", peer);
|
info!("player kicked: {}", peer);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue