mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 15:13:16 +00:00
allow kick/ban
This commit is contained in:
parent
26239df5ac
commit
9734bf154a
3 changed files with 51 additions and 3 deletions
|
@ -937,20 +937,37 @@ impl eframe::App for App {
|
||||||
ScrollArea::vertical().auto_shrink(false).show(ui, |ui| {
|
ScrollArea::vertical().auto_shrink(false).show(ui, |ui| {
|
||||||
for peer in netman.peer.iter_peer_ids() {
|
for peer in netman.peer.iter_peer_ids() {
|
||||||
let role = peer_role(peer, netman);
|
let role = peer_role(peer, netman);
|
||||||
|
|
||||||
let username = steam.get_user_name(peer.into());
|
let username = steam.get_user_name(peer.into());
|
||||||
let avatar = steam.get_avatar(ctx, peer.into());
|
let avatar = steam.get_avatar(ctx, peer.into());
|
||||||
if let Some(avatar) = avatar {
|
if let Some(avatar) = avatar {
|
||||||
avatar.display_with_labels(ui, &username, &role);
|
avatar.display_with_labels(ui, &username, &role);
|
||||||
ui.add_space(5.0);
|
|
||||||
} else {
|
} else {
|
||||||
ui.label(&username);
|
ui.label(&username);
|
||||||
}
|
}
|
||||||
|
if netman.peer.is_host() && peer != netman.peer.my_id() {
|
||||||
|
if ui.button("kick").clicked() {
|
||||||
|
netman.kick_list.lock().unwrap().push(peer)
|
||||||
|
}
|
||||||
|
if ui.button("ban").clicked() {
|
||||||
|
netman.ban_list.lock().unwrap().push(peer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if avatar.is_some() {
|
||||||
|
ui.add_space(5.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
for peer in netman.peer.iter_peer_ids() {
|
for peer in netman.peer.iter_peer_ids() {
|
||||||
ui.label(peer.to_string());
|
ui.label(peer.to_string());
|
||||||
|
if netman.peer.is_host() && peer != netman.peer.my_id() {
|
||||||
|
if ui.button("kick").clicked() {
|
||||||
|
netman.kick_list.lock().unwrap().push(peer)
|
||||||
|
}
|
||||||
|
if ui.button("ban").clicked() {
|
||||||
|
netman.ban_list.lock().unwrap().push(peer)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -131,6 +131,8 @@ pub struct NetManager {
|
||||||
pub debug_markers: Mutex<Vec<DebugMarker>>,
|
pub debug_markers: Mutex<Vec<DebugMarker>>,
|
||||||
pub friendly_fire_team: AtomicI32,
|
pub friendly_fire_team: AtomicI32,
|
||||||
pub friendly_fire: AtomicBool,
|
pub friendly_fire: AtomicBool,
|
||||||
|
pub ban_list: Mutex<Vec<OmniPeerId>>,
|
||||||
|
pub kick_list: Mutex<Vec<OmniPeerId>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NetManager {
|
impl NetManager {
|
||||||
|
@ -151,6 +153,8 @@ impl NetManager {
|
||||||
debug_markers: Default::default(),
|
debug_markers: Default::default(),
|
||||||
friendly_fire_team: AtomicI32::new(-2),
|
friendly_fire_team: AtomicI32::new(-2),
|
||||||
friendly_fire: AtomicBool::new(false),
|
friendly_fire: AtomicBool::new(false),
|
||||||
|
ban_list: Default::default(),
|
||||||
|
kick_list: Default::default(),
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
@ -283,6 +287,23 @@ impl NetManager {
|
||||||
warn!("Websocket flush not ok: {err}");
|
warn!("Websocket flush not ok: {err}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let mut list = self.kick_list.lock().unwrap();
|
||||||
|
for peer in list.iter() {
|
||||||
|
info!("player kicked: {}", 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);
|
||||||
|
}
|
||||||
|
list.clear();
|
||||||
|
let list = self.ban_list.lock().unwrap();
|
||||||
|
for peer in list.iter() {
|
||||||
|
info!("player kicked: {}", 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);
|
||||||
|
}
|
||||||
for net_event in self.peer.recv() {
|
for net_event in self.peer.recv() {
|
||||||
match net_event {
|
match net_event {
|
||||||
omni::OmniNetworkEvent::PeerConnected(id) => {
|
omni::OmniNetworkEvent::PeerConnected(id) => {
|
||||||
|
@ -333,6 +354,11 @@ impl NetManager {
|
||||||
};
|
};
|
||||||
match net_msg {
|
match net_msg {
|
||||||
NetMsg::Welcome => {}
|
NetMsg::Welcome => {}
|
||||||
|
NetMsg::PeerDisconnected{id} => {
|
||||||
|
info!("player kicked: {}", id);
|
||||||
|
state.try_ws_write(ws_encode_proxy("leave", id.as_hex()));
|
||||||
|
state.world.handle_peer_left(id);
|
||||||
|
}
|
||||||
NetMsg::EndRun => state.try_ws_write(ws_encode_proxy(
|
NetMsg::EndRun => state.try_ws_write(ws_encode_proxy(
|
||||||
"end_run",
|
"end_run",
|
||||||
self.peer.my_id().to_string(),
|
self.peer.my_id().to_string(),
|
||||||
|
@ -364,6 +390,9 @@ impl NetManager {
|
||||||
host,
|
host,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
NetMsg::Kick => {
|
||||||
|
std::process::exit(0)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -633,4 +662,4 @@ impl Drop for NetManager {
|
||||||
info!("Skip saving run info: not a host");
|
info!("Skip saving run info: not a host");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -21,6 +21,8 @@ pub(crate) struct MessageRequest<T> {
|
||||||
pub(crate) enum NetMsg {
|
pub(crate) enum NetMsg {
|
||||||
Welcome,
|
Welcome,
|
||||||
EndRun,
|
EndRun,
|
||||||
|
Kick,
|
||||||
|
PeerDisconnected { id: OmniPeerId },
|
||||||
StartGame { settings: GameSettings },
|
StartGame { settings: GameSettings },
|
||||||
ModRaw { data: Vec<u8> },
|
ModRaw { data: Vec<u8> },
|
||||||
ModCompressed { data: Vec<u8> },
|
ModCompressed { data: Vec<u8> },
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue