pub struct TCPServer<Q, A, H, F>where
    Q: SerializeMessage,
    A: SerializeMessage,
    H: Fn(Q) -> F + Send + Sync + 'static,
    F: Future<Output = Result<TCPResponse<A>>> + Send + 'static,{ /* private fields */ }
Expand description

Server to handle TCP requests.

When the .listen() method is called the server starts accepting (possibly simultaneous) connections from any number of clients.

When a client sends a message, the server will invoke the given request handle to process the request, and take an action based on the handler return type (see TCPResponse for a list of possible actions).

If the client closes the connection without warning, the server will simply drop that connection.

If the client sends a malformed message (without or with a wrong length header), the server can potentially read too little data, or hang waiting for data to read.

Implementations§

source§

impl<Q, A, H, F> TCPServer<Q, A, H, F>where A: SerializeMessage, Q: SerializeMessage, H: Fn(Q) -> F + Send + Sync + 'static, F: Future<Output = Result<TCPResponse<A>>> + Send + 'static,

source

pub fn new(host: impl Into<String>, port: u16, handler: H) -> Arc<Self>

Create a new server listening to the given host and port, processing requests with handler.

Does not actually start listening, for that you need to call listen.

The socket will be freed when the struct is dropped.

source

pub fn with_bad_request_handler( self: Arc<Self>, bad_request_response: fn() -> TCPResponse<A> ) -> Arc<Self>

source

pub fn with_inactivity_timeout(self: Arc<Self>, timeout_ms: u64) -> Arc<Self>

Instructs the server to quit after the given amount of time without any request.

Note that requests that take longer than the timeout amount, will be dropped in the middle of processing

source

pub async fn listen(self: Arc<Self>)

Start accepting connections from clients, processing and answering messages.

If multiple servers are started on the same port, this function will panic.

Auto Trait Implementations§

§

impl<Q, A, H, F> RefUnwindSafe for TCPServer<Q, A, H, F>where H: RefUnwindSafe, Q: RefUnwindSafe,

§

impl<Q, A, H, F> Send for TCPServer<Q, A, H, F>

§

impl<Q, A, H, F> Sync for TCPServer<Q, A, H, F>

§

impl<Q, A, H, F> Unpin for TCPServer<Q, A, H, F>where H: Unpin, Q: Unpin,

§

impl<Q, A, H, F> UnwindSafe for TCPServer<Q, A, H, F>where H: UnwindSafe, Q: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
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 Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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