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 internallyStructs§
- Crossbeam
Io - In-process transport component backed by
crossbeam-channel. - Crossbeam
Plugin - Bevy plugin that integrates
CrossbeamIowith Lightyear links.