Skip to main content

Crate lightyear_crossbeam

Crate lightyear_crossbeam 

Source
Expand description

In-process Crossbeam channel transport for Lightyear.

This crate provides CrossbeamIo, a transport implementation backed by crossbeam-channel. It is primarily intended for tests, local examples, and in-process simulations where deterministic setup and low overhead are more useful than real network IO. It still uses Lightyear’s normal Link buffers and lifecycle markers, so code above the transport layer can be exercised without special cases.

§Connection layer

CrossbeamPlugin is a pure transport: it inserts Linked once LinkStart is triggered but does not drive the Connected state. Pair it with a connection plugin to obtain a full peer connection. For handshake-less use, pair it with lightyear_raw_connection::client::RawConnectionPlugin and/or lightyear_raw_connection::server::RawConnectionPlugin and mark entities with RawClient / RawServer so that Linked implies Connected. For authenticated use, pair it with lightyear_netcode.

§Spawning crossbeam entities

Always trigger LinkStart to bring a CrossbeamIo entity online, rather than inserting Linked directly. CrossbeamPlugin gates its link observer on With<CrossbeamIo>, so by the time Linked is inserted the required Aeronet-compatible LocalAddr and PeerAddr components are also present. Connection-layer Add<Linked> observers can then construct their local and remote IDs reliably.

// Server-side mirror entity (one per connecting crossbeam client):
let mirror = commands
    .spawn((LinkOf { server }, Link::new(None), io))
    .id();
commands.trigger(LinkStart { entity: mirror });

// Client-side connection entity:
let client = commands
    .spawn((Client::default(), RawClient, Link::new(None), io))
    .id();
commands.trigger(Connect { entity: client });  // Connect → LinkStart internally

Structs§

CrossbeamIo
In-process transport component backed by crossbeam-channel.
CrossbeamPlugin
Bevy plugin that integrates CrossbeamIo with Lightyear links.