use nightshade_api::prelude::*;
struct Session {
server: Network,
client: Network,
hud: Entity,
received: u32,
tick: u32,
}
fn main() {
run(setup, update).unwrap();
}
fn setup(world: &mut World) -> Session {
set_window_title(world, "Net Chat");
spawn_cube(world, vec3(0.0, 0.5, 0.0));
let server = host("127.0.0.1:9700");
let client = join("127.0.0.1:9700");
subscribe(&server, &["chat"]);
subscribe(&client, &["chat"]);
let hud = spawn_text(world, "connecting...", ScreenAnchor::TopLeft);
Session {
server,
client,
hud,
received: 0,
tick: 0,
}
}
fn update(world: &mut World, session: &mut Session) {
session.tick += 1;
if session.tick.is_multiple_of(60) {
let message = format!("ping {}", session.tick / 60);
publish_json(&session.server, "chat", &message);
publish(&session.client, "count", &session.tick);
publish_bytes(&session.server, "blob", &[1, 2, 3]);
}
for message in drain_network(&mut session.server) {
let _ = message;
session.received += 1;
}
for message in drain_network(&mut session.client) {
let _ = message;
session.received += 1;
}
set_text(
world,
session.hud,
&format!(
"server {} ({}) client {} received {}",
is_connected(&session.server),
client_id(&session.server),
is_connected(&session.client),
session.received
),
);
}