Server

Struct Server 

Source
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 Server

Source

pub fn new(protocol_id: u64, private_key: Key) -> Result<Self>

Create a new server with a default configuration.

For a custom configuration, use Server::with_config instead.

Source§

impl<Ctx> Server<Ctx>

Source

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>

Source

pub fn update_state(&mut self, delta_ms: f64)

Updates the server state without receiving packets.

Source

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.)

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn disconnect_all(&mut self, sender: &mut LinkSender) -> Result<()>

Disconnects all clients.

Source

pub fn connected_client_ids(&self) -> impl Iterator<Item = u64> + '_

Source

pub fn client_ids(&self) -> impl Iterator<Item = u64> + '_

Source

pub fn num_connected_clients(&self) -> usize

Gets the number of connected clients.

Source

pub fn client_entity(&self, client_id: u64) -> Option<Entity>

Gets the entity of a client.

Source

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> Captures<U> for T
where T: ?Sized,

Source§

impl<T> Channel for T
where T: Send + Sync + 'static,

Source§

impl<T> ConditionalSend for T
where T: Send,