nightshade-api 0.53.0

Procedural high level API for the nightshade game engine
Documentation
//! Multiplayer pubsub in one process: a host peer and a joining peer exchange
//! messages over named topics through the hearsay broker. Run with the `net`
//! feature: `cargo run -r -p nightshade-api --example net_chat --features net`.

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
        ),
    );
}