mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
make cli host work
This commit is contained in:
parent
83cae6ce67
commit
33a2a2ce2c
5 changed files with 55 additions and 11 deletions
|
@ -51,6 +51,11 @@ After that, just start a new Noita game on everyone's PCs, and you should be in
|
||||||
|
|
||||||
can also connect via cli, just run `noita_proxy --lobby [steam_code/ip and port]`
|
can also connect via cli, just run `noita_proxy --lobby [steam_code/ip and port]`
|
||||||
|
|
||||||
|
|
||||||
|
## Cli host
|
||||||
|
|
||||||
|
can also host via cli, just run `noita_proxy --host [steam/port]`, "--host steam" will host a steam game and "--host 5123" or any port will host via ip at that port
|
||||||
|
|
||||||
## Connecting via steam without steam version of game
|
## Connecting via steam without steam version of game
|
||||||
|
|
||||||
to connect via steam without the steam version of game, since its more stable you can do the following
|
to connect via steam without the steam version of game, since its more stable you can do the following
|
||||||
|
|
|
@ -1187,8 +1187,7 @@ fn peer_role(peer: net::omni::OmniPeerId, netman: &Arc<net::NetManager>) -> Stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start_cli(lobby: String)
|
fn cli_setup() -> (steam_helper::SteamState, NetManagerInit) {
|
||||||
{
|
|
||||||
let mut state = steam_helper::SteamState::new().unwrap();
|
let mut state = steam_helper::SteamState::new().unwrap();
|
||||||
let my_nickname = Some(state.get_user_name(state.get_my_id()));
|
let my_nickname = Some(state.get_user_name(state.get_my_id()));
|
||||||
let mut mod_manager = ModmanagerSettings{game_exe_path: PathBuf::new(), game_save_path: Some(PathBuf::new())};
|
let mut mod_manager = ModmanagerSettings{game_exe_path: PathBuf::new(), game_save_path: Some(PathBuf::new())};
|
||||||
|
@ -1222,8 +1221,13 @@ pub fn start_cli(lobby: String)
|
||||||
player_color: PlayerColor::default(),
|
player_color: PlayerColor::default(),
|
||||||
cosmetics,
|
cosmetics,
|
||||||
mod_path: mod_manager.mod_path(),
|
mod_path: mod_manager.mod_path(),
|
||||||
player_path: player_path.clone(),
|
player_path,
|
||||||
};
|
};
|
||||||
|
(state, netmaninit)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect_cli(lobby: String) {
|
||||||
|
let (state, netmaninit) = cli_setup();
|
||||||
let varient = if lobby.contains('.')
|
let varient = if lobby.contains('.')
|
||||||
{
|
{
|
||||||
PeerVariant::Tangled(Peer::connect(SocketAddr::from_str(&lobby).unwrap(), None).unwrap())
|
PeerVariant::Tangled(Peer::connect(SocketAddr::from_str(&lobby).unwrap(), None).unwrap())
|
||||||
|
@ -1234,6 +1238,26 @@ pub fn start_cli(lobby: String)
|
||||||
);
|
);
|
||||||
PeerVariant::Steam(peer)
|
PeerVariant::Steam(peer)
|
||||||
};
|
};
|
||||||
|
let player_path = netmaninit.player_path.clone();
|
||||||
let netman = net::NetManager::new(varient, netmaninit);
|
let netman = net::NetManager::new(varient, netmaninit);
|
||||||
netman.clone().start_inner(player_path).unwrap();
|
netman.clone().start_inner(player_path, true).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn host_cli(port: u16) {
|
||||||
|
let (state, netmaninit) = cli_setup();
|
||||||
|
let varient = if port != 0
|
||||||
|
{
|
||||||
|
let bind_addr = SocketAddr::new("0.0.0.0".parse().unwrap(), port);
|
||||||
|
let peer = Peer::host(bind_addr, None).unwrap();
|
||||||
|
PeerVariant::Tangled(peer)
|
||||||
|
} else {
|
||||||
|
let peer = net::steam_networking::SteamPeer::new_host(
|
||||||
|
steamworks::LobbyType::Private,
|
||||||
|
state.client,
|
||||||
|
);
|
||||||
|
PeerVariant::Steam(peer)
|
||||||
|
};
|
||||||
|
let player_path = netmaninit.player_path.clone();
|
||||||
|
let netman = net::NetManager::new(varient, netmaninit);
|
||||||
|
netman.clone().start_inner(player_path, true).unwrap();
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@ use eframe::{
|
||||||
egui::{IconData, ViewportBuilder},
|
egui::{IconData, ViewportBuilder},
|
||||||
NativeOptions,
|
NativeOptions,
|
||||||
};
|
};
|
||||||
use noita_proxy::{args::Args, recorder::replay_file, start_cli, App};
|
use noita_proxy::{args::Args, recorder::replay_file, connect_cli, host_cli, App};
|
||||||
use tracing::{info, level_filters::LevelFilter};
|
use tracing::{info, level_filters::LevelFilter};
|
||||||
use tracing_subscriber::EnvFilter;
|
use tracing_subscriber::EnvFilter;
|
||||||
|
|
||||||
|
@ -24,9 +24,15 @@ async fn main() {
|
||||||
if let Some(replay) = args.replay_folder {
|
if let Some(replay) = args.replay_folder {
|
||||||
replay_file(replay)
|
replay_file(replay)
|
||||||
}
|
}
|
||||||
else if let Some(lobby) = args.lobby
|
else if let Some(host) = args.host {
|
||||||
{
|
let port = if host.to_ascii_lowercase() == "steam" {
|
||||||
start_cli(lobby)
|
0
|
||||||
|
} else {
|
||||||
|
host.parse::<u16>().unwrap_or(5123)
|
||||||
|
};
|
||||||
|
host_cli(port)
|
||||||
|
} else if let Some(lobby) = args.lobby {
|
||||||
|
connect_cli(lobby)
|
||||||
} else {
|
} else {
|
||||||
let icon = image::load_from_memory(include_bytes!("../assets/icon.png"))
|
let icon = image::load_from_memory(include_bytes!("../assets/icon.png"))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|
|
@ -168,7 +168,7 @@ impl NetManager {
|
||||||
create_dir(tmp).unwrap();
|
create_dir(tmp).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn start_inner(self: Arc<NetManager>, player_path: PathBuf) -> io::Result<()> {
|
pub(crate) fn start_inner(self: Arc<NetManager>, player_path: PathBuf, mut cli: bool) -> io::Result<()> {
|
||||||
Self::clean_dir(player_path.clone());
|
Self::clean_dir(player_path.clone());
|
||||||
if !self.init_settings.cosmetics.0 {
|
if !self.init_settings.cosmetics.0 {
|
||||||
File::create(player_path.parent().unwrap().join("tmp/no_crown"))?;
|
File::create(player_path.parent().unwrap().join("tmp/no_crown"))?;
|
||||||
|
@ -235,6 +235,12 @@ impl NetManager {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
while self.continue_running.load(atomic::Ordering::Relaxed) {
|
while self.continue_running.load(atomic::Ordering::Relaxed) {
|
||||||
|
if cli {
|
||||||
|
if let Some(n) = self.peer.lobby_id() {
|
||||||
|
println!("Lobby ID: {}", n.raw());
|
||||||
|
cli = false
|
||||||
|
}
|
||||||
|
}
|
||||||
if self.end_run.load(atomic::Ordering::Relaxed) {
|
if self.end_run.load(atomic::Ordering::Relaxed) {
|
||||||
for id in self.peer.iter_peer_ids() {
|
for id in self.peer.iter_peer_ids() {
|
||||||
self.send(id, &NetMsg::EndRun, Reliability::Reliable);
|
self.send(id, &NetMsg::EndRun, Reliability::Reliable);
|
||||||
|
@ -501,7 +507,7 @@ impl NetManager {
|
||||||
pub fn start(self: Arc<NetManager>, player_path: PathBuf) -> JoinHandle<()> {
|
pub fn start(self: Arc<NetManager>, player_path: PathBuf) -> JoinHandle<()> {
|
||||||
info!("Starting netmanager");
|
info!("Starting netmanager");
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let result = self.clone().start_inner(player_path);
|
let result = self.clone().start_inner(player_path, false);
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
error!("Error in netmanager: {}", err);
|
error!("Error in netmanager: {}", err);
|
||||||
*self.error.lock().unwrap() = Some(err);
|
*self.error.lock().unwrap() = Some(err);
|
||||||
|
@ -601,4 +607,4 @@ impl Drop for NetManager {
|
||||||
info!("Skip saving run info: not a host");
|
info!("Skip saving run info: not a host");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,4 +17,7 @@ pub struct Args {
|
||||||
/// steam lobby code.
|
/// steam lobby code.
|
||||||
#[argh(option)]
|
#[argh(option)]
|
||||||
pub lobby: Option<String>,
|
pub lobby: Option<String>,
|
||||||
|
/// host either steam or ip.
|
||||||
|
#[argh(option)]
|
||||||
|
pub host: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue