mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
76 lines
2.5 KiB
Rust
76 lines
2.5 KiB
Rust
use std::{
|
|
env::args, io::stdin, thread::{sleep, spawn}, time::Duration
|
|
};
|
|
|
|
use crossbeam::channel::bounded;
|
|
use tangled::{Peer, Reliability};
|
|
use tracing::Level;
|
|
use tracing_subscriber::FmtSubscriber;
|
|
|
|
fn main() {
|
|
let subscriber = FmtSubscriber::builder()
|
|
.with_max_level(Level::DEBUG)
|
|
.finish();
|
|
tracing::subscriber::set_global_default(subscriber).unwrap();
|
|
|
|
let mut args = args().skip(1);
|
|
let peer = match args.next().as_ref().map(|s| s.as_str()) {
|
|
Some("host") => {
|
|
let bind_addr = match args.next().map_or(None, |arg| arg.parse().ok()) {
|
|
Some(addr) => addr,
|
|
None => {
|
|
println!("Expected an address:port to host on as a second argument");
|
|
return;
|
|
}
|
|
};
|
|
Peer::host(bind_addr, None)
|
|
}
|
|
Some("connect") => {
|
|
let connect_addr = match args.next().map_or(None, |arg| arg.parse().ok()) {
|
|
Some(addr) => addr,
|
|
None => {
|
|
println!("Expected an address:port to connect to as a second argument");
|
|
return;
|
|
}
|
|
};
|
|
Peer::connect(connect_addr, None)
|
|
}
|
|
Some(_) | None => {
|
|
println!("First argument should be one of 'host', 'connect'");
|
|
return;
|
|
}
|
|
}
|
|
.unwrap();
|
|
let (s, r) = bounded(1);
|
|
spawn(move || {
|
|
for msg in stdin().lines() {
|
|
s.send(msg.unwrap()).unwrap();
|
|
}
|
|
});
|
|
loop {
|
|
for msg in peer.recv() {
|
|
match msg {
|
|
tangled::NetworkEvent::PeerConnected(id) => println!("Peer connected: {}", id),
|
|
tangled::NetworkEvent::PeerDisconnected(id) => {
|
|
println!("Peer disconnected: {}", id)
|
|
}
|
|
tangled::NetworkEvent::Message(msg) => {
|
|
println!("{}", String::from_utf8_lossy(&msg.data))
|
|
}
|
|
}
|
|
}
|
|
for msg in r.try_iter() {
|
|
println!("State: {:?}", peer.state());
|
|
let data = msg.as_bytes();
|
|
for destination in peer.iter_peer_ids() {
|
|
if destination == peer.my_id().unwrap() {
|
|
continue;
|
|
}
|
|
println!("Sent to {}", destination);
|
|
peer.send(destination, data.to_vec(), Reliability::Reliable)
|
|
.unwrap();
|
|
}
|
|
}
|
|
sleep(Duration::from_millis(10));
|
|
}
|
|
}
|