pub struct Server<Ctx = ()> { /* private fields */ }Expand description
The netcode server.
Responsible for accepting connections from clients and communicating with them using the netcode protocol. The server should be run in a loop to process incoming packets, send updates to clients, and maintain stable connections.
Implementations§
Source§impl<Ctx> Server<Ctx>
impl<Ctx> Server<Ctx>
Sourcepub fn with_config(
protocol_id: u64,
private_key: Key,
cfg: ServerConfig<Ctx>,
) -> Result<Self>
pub fn with_config( protocol_id: u64, private_key: Key, cfg: ServerConfig<Ctx>, ) -> Result<Self>
Create a new server with a custom configuration.
Callbacks with context can be registered with the server to be notified when the server changes states.
See ServerConfig for more details.
§Example
let private_key = generate_key();
let protocol_id = 0x123456789ABCDEF0;
let cfg = ServerConfig::with_context(42).on_connect(|idx, _, ctx| {
assert_eq!(ctx, &42);
});
let server = Server::with_config(protocol_id, private_key, cfg).unwrap();Source§impl<Ctx> Server<Ctx>
impl<Ctx> Server<Ctx>
Sourcepub fn update_state(&mut self, delta_ms: f64)
pub fn update_state(&mut self, delta_ms: f64)
Updates the server state without receiving packets.
Sourcepub fn receive(
&mut self,
link: &mut Link,
entity_mut: &mut EntityCommands<'_>,
) -> Result<Vec<Error>>
pub fn receive( &mut self, link: &mut Link, entity_mut: &mut EntityCommands<'_>, ) -> Result<Vec<Error>>
Receive packets from the links, process them. We might buffer some packets to the link as well (for Timeouts or ConnectionRequests, etc.)
Sourcepub fn send(
&mut self,
buf: SendPayload,
client_id: u64,
sender: &mut LinkSender,
) -> Result<()>
pub fn send( &mut self, buf: SendPayload, client_id: u64, sender: &mut LinkSender, ) -> Result<()>
Sends a packet to a client.
The provided buffer must be smaller than MAX_PACKET_SIZE.
Sourcepub fn send_all(
&mut self,
buf: SendPayload,
sender: &mut LinkSender,
) -> Result<()>
pub fn send_all( &mut self, buf: SendPayload, sender: &mut LinkSender, ) -> Result<()>
Sends a packet to all connected clients.
The provided buffer must be smaller than MAX_PACKET_SIZE.
Sourcepub fn token(
&mut self,
client_id: u64,
server_addr: SocketAddr,
) -> ConnectTokenBuilder<SocketAddr>
pub fn token( &mut self, client_id: u64, server_addr: SocketAddr, ) -> ConnectTokenBuilder<SocketAddr>
Creates a connect token builder for a given client ID.
The builder can be used to configure the token with additional data before generating the final token.
The generate method must be called on the builder to generate the final token.
§Example
let private_key = generate_key();
let protocol_id = 0x123456789ABCDEF0;
let bind_addr = "0.0.0.0:0";
let mut server = Server::new(protocol_id, private_key).unwrap();
let client_id = 123u64;
let token = server.token(client_id, SocketAddr::from_str(bind_addr).unwrap())
.expire_seconds(60) // defaults to 30 seconds, negative for no expiry
.timeout_seconds(-1) // defaults to 15 seconds, negative for no timeout
.generate()
.unwrap();See ConnectTokenBuilder for more options.
Sourcepub fn disconnect(
&mut self,
client_id: u64,
sender: &mut LinkSender,
) -> Result<()>
pub fn disconnect( &mut self, client_id: u64, sender: &mut LinkSender, ) -> Result<()>
Disconnects a client.
The server will send a number of redundant disconnect packets to the client, and then remove its connection info.
Sourcepub fn disconnect_all(&mut self, sender: &mut LinkSender) -> Result<()>
pub fn disconnect_all(&mut self, sender: &mut LinkSender) -> Result<()>
Disconnects all clients.
pub fn connected_client_ids(&self) -> impl Iterator<Item = u64> + '_
pub fn client_ids(&self) -> impl Iterator<Item = u64> + '_
Sourcepub fn num_connected_clients(&self) -> usize
pub fn num_connected_clients(&self) -> usize
Gets the number of connected clients.
Sourcepub fn client_entity(&self, client_id: u64) -> Option<Entity>
pub fn client_entity(&self, client_id: u64) -> Option<Entity>
Gets the entity of a client.
Sourcepub fn local_addr(&self) -> SocketAddr
pub fn local_addr(&self) -> SocketAddr
Gets the address of the server
Auto Trait Implementations§
impl<Ctx> Freeze for Server<Ctx>where
Ctx: Freeze,
impl<Ctx = ()> !RefUnwindSafe for Server<Ctx>
impl<Ctx> Send for Server<Ctx>where
Ctx: Send,
impl<Ctx> Sync for Server<Ctx>where
Ctx: Sync,
impl<Ctx> Unpin for Server<Ctx>where
Ctx: Unpin,
impl<Ctx = ()> !UnwindSafe for Server<Ctx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.