TCPServer

Struct TCPServer 

Source
pub struct TCPServer<State: Clone + Send + Sync + 'static = ()> { /* private fields */ }
Available on (crate features clients or servers) and crate feature servers only.
Expand description

An implementation of a TCP server.

This is the “base” TCP Server class that any of the servers that cat-dev will be built on. It has extensions for handling any potential type of server that we will ever need to support.

This server accepts lots of parameters so look at the modules documentation for general info about how processing works.

Implementations§

Source§

impl TCPServer<()>

Source

pub async fn new<AddrTy, ServiceTy>( service_name: &'static str, bind_addr: AddrTy, initial_service: ServiceTy, nagle_hooks: (Option<&'static dyn PreNagleFnTy>, Option<&'static dyn PostNagleFnTy>), guard: impl Into<NagleGuard>, trace_io_during_debug: bool, ) -> Result<Self, CommonNetAPIError>
where AddrTy: ToSocketAddrs, ServiceTy: Clone + Send + Service<Request<()>, Response = Response, Error = Infallible> + 'static, ServiceTy::Future: Send + 'static,

Create a new TCP Server without having to specify any particular state.

§Errors

If we cannot look up one specific address to bind too.

Source§

impl<State: Clone + Send + Sync + 'static> TCPServer<State>

Source

pub async fn out_of_bound_send( server_id: u64, stream_id: u64, message: ResponseStreamMessage, ) -> Result<(), CatBridgeError>

Send a message completely out of band to a particular open stream.

§Errors
  • If the stream is not actively open.
  • If we could not actively queue a packet to go out.
Source

pub async fn out_of_bound_broadcast( server_id: u64, message: ResponseStreamMessage, ) -> Vec<Result<(), CatBridgeError>>

Send a message completely out of band to all open stream.

Source

pub async fn new_with_state<AddrTy, ServiceTy>( service_name: &'static str, bind_addr: AddrTy, initial_service: ServiceTy, nagle_hooks: (Option<&'static dyn PreNagleFnTy>, Option<&'static dyn PostNagleFnTy>), guard: impl Into<NagleGuard>, state: State, trace_io_during_debug: bool, ) -> Result<Self, CommonNetAPIError>
where AddrTy: ToSocketAddrs, ServiceTy: Clone + Send + Service<Request<State>, Response = Response, Error = Infallible> + 'static, ServiceTy::Future: Send + 'static,

Create a new TCP Server along with the state for this server.

§Errors

If we cannot look up one specific address to bind too.

Source

pub const fn id(&self) -> u64

Get the particular ID for this server.

Source

pub const fn ip(&self) -> IpAddr

The IP address we should connect to bind too.

Source

pub const fn port(&self) -> u16

Get the port that we’re either binding too, or connecting too.

Source

pub const fn set_cat_dev_slowdown(&mut self, slowdown: Option<Duration>)

Set the slowdown to before sending bytes from this server.

Source

pub const fn chunk_output_at_size(&self) -> Option<usize>

Source

pub const fn set_chunk_output_at_size(&mut self, new_size: Option<usize>)

Source

pub const fn slowloris_timeout(&self) -> Duration

Source

pub const fn set_slowloris_timeout(&mut self, slowloris_timeout: Duration)

Source

pub const fn on_stream_begin( &self, ) -> Option<&UnderlyingOnStreamBeginService<State>>

Source

pub fn set_raw_on_stream_begin( &mut self, on_start: Option<UnderlyingOnStreamBeginService<State>>, ) -> Result<(), CommonNetAPIError>

Set a hook to run when a stream has been created.

This is what happens when a new machine connects. So it may also be refered to as “on connect”. This assumes you’re assigning a service that already exists and is in the raw storage type, you may want to look into Self::set_on_stream_begin, or Self::set_on_stream_begin_service.

§Errors

If the stream beginning hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn set_on_stream_begin<HandlerTy, HandlerParamsTy>( &mut self, handler: HandlerTy, ) -> Result<(), CommonNetAPIError>
where HandlerParamsTy: Send + 'static, HandlerTy: OnResponseStreamBeginHandler<HandlerParamsTy, State> + Clone + Send + 'static,

Set a function hook to run when a stream has been created.

This is what happens when a new machine connects. So it may also be refered to as “on connect”. This assumes you’re assigning a function to on stream begin otherwise use Self::set_raw_on_stream_begin, or Self::set_on_stream_begin_service.

§Errors

If the stream beginning hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn set_on_stream_begin_service<ServiceTy>( &mut self, service_ty: ServiceTy, ) -> Result<(), CommonNetAPIError>
where ServiceTy: Clone + Send + Service<ResponseStreamEvent<State>, Response = bool, Error = CatBridgeError> + 'static, ServiceTy::Future: Send + 'static,

Set a function hook to run when a stream has been created.

This is what happens when a new machine connects. So it may also be refered to as “on connect”. This assumes you’re assigning a Service to on stream begin otherwise use Self::set_raw_on_stream_begin, or Self::set_on_stream_begin.

§Errors

If the stream beginning hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn layer_on_stream_begin<LayerTy, ServiceTy>( &mut self, layer: LayerTy, ) -> Result<(), CommonNetAPIError>
where LayerTy: Layer<UnderlyingOnStreamBeginService<State>, Service = ServiceTy>, ServiceTy: Service<ResponseStreamEvent<State>, Response = bool, Error = CatBridgeError> + Clone + Send + 'static, <LayerTy::Service as Service<ResponseStreamEvent<State>>>::Future: Send + 'static,

Add a layer to the service to process when a stream begins, or a new connection is created.

§Errors

If there is no on stream begin handler that is currently active.

Source

pub const fn on_stream_end( &self, ) -> Option<&UnderlyingOnStreamEndService<State>>

Source

pub fn set_raw_on_stream_end( &mut self, on_end: Option<UnderlyingOnStreamEndService<State>>, ) -> Result<(), CommonNetAPIError>

Set a hook to run when a stream is being destroyed.

This is what happens when a machine disconnects. So it may also be refered to as “on disconnect”. This assumes you’re assigning a service that already exists and is in the raw storage type, you may want to look into Self::set_on_stream_end, or Self::set_on_stream_end_service.

§Errors

If the stream ending hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn set_on_stream_end<HandlerTy, HandlerParamsTy>( &mut self, handler: HandlerTy, ) -> Result<(), CommonNetAPIError>
where HandlerParamsTy: Send + 'static, HandlerTy: OnResponseStreamEndHandler<HandlerParamsTy, State> + Clone + Send + 'static,

Set a function hook to run when a stream is being destroyed.

This is what happens when a machine disconnects. So it may also be refered to as “on disconnect”. This assumes you’re assigning a function to on stream end otherwise use Self::set_raw_on_stream_end, or Self::set_on_stream_end_service.

§Errors

If the stream ending hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn set_on_stream_end_service<ServiceTy>( &mut self, service_ty: ServiceTy, ) -> Result<(), CommonNetAPIError>
where ServiceTy: Clone + Send + Service<ResponseStreamEvent<State>, Response = (), Error = CatBridgeError> + 'static, ServiceTy::Future: Send + 'static,

Set a function hook to run when a stream is being destroyed.

This is what happens when a machine disconnects. So it may also be refered to as “on disconnect”. This assumes you’re assigning a Service to on stream end otherwise use Self::set_raw_on_stream_end, or Self::set_on_stream_end.

§Errors

If the stream beginning hook has already been registered. If you’re looking to perform multiple actions at once, look into layer-ing.

Source

pub fn layer_on_stream_end<LayerTy, ServiceTy>( &mut self, layer: LayerTy, ) -> Result<(), CommonNetAPIError>
where LayerTy: Layer<UnderlyingOnStreamEndService<State>, Service = ServiceTy>, ServiceTy: Service<ResponseStreamEvent<State>, Response = (), Error = CatBridgeError> + Clone + Send + 'static, <LayerTy::Service as Service<ResponseStreamEvent<State>>>::Future: Send + 'static,

Add a layer to the service to process when a stream ends, or a new connection is destroyed.

§Errors

If there is no on stream end handler that is currently active.

Source

pub const fn initial_service( &self, ) -> &BoxCloneService<Request<State>, Response, Infallible>

Source

pub fn layer_initial_service<LayerTy, ServiceTy>(&mut self, layer: LayerTy)
where LayerTy: Layer<BoxCloneService<Request<State>, Response, Infallible>, Service = ServiceTy>, ServiceTy: Service<Request<State>, Response = Response, Error = Infallible> + Clone + Send + 'static, <LayerTy::Service as Service<Request<State>>>::Future: Send + 'static,

Source

pub const fn state(&self) -> &State

Get a reference to the current state of the server.

Source

pub async fn connect(self) -> Result<(), CatBridgeError>

“Connect” to our remote client address, and start serving ourselves to whoever we connect too.

NOTE: this will NOT return until the service either runs into an error, or the task is cancelled.

§Errors

If we cannot connect to the remote source, fetch the local address, or handle the connection in some other way.

Source

pub async fn bind(self) -> Result<(), CatBridgeError>

Bind this server, and start listening on the specified address.

NOTE: this will NOT return until the service either runs into an error, or gets cancelled.

§Errors
  • If we cannot bind to the requested address, and port.
  • If we run into an error accept’ing a TCP connection.

Trait Implementations§

Source§

impl<State: Clone + Debug + Send + Sync + 'static> Debug for TCPServer<State>

Source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
Source§

impl<State: Clone + Debug + Send + Sync + Valuable + 'static> Structable for TCPServer<State>

Source§

fn definition(&self) -> StructDef<'_>

Returns the struct’s definition. Read more
Source§

impl<State: Clone + Debug + Send + Sync + Valuable + 'static> Valuable for TCPServer<State>

Source§

fn as_value(&self) -> Value<'_>

Converts self into a Value instance. Read more
Source§

fn visit(&self, visitor: &mut dyn Visit)

Calls the relevant method on Visit to extract data from self. Read more
Source§

fn visit_slice(slice: &[Self], visit: &mut dyn Visit)
where Self: Sized,

Auto Trait Implementations§

§

impl<State> Freeze for TCPServer<State>
where State: Freeze,

§

impl<State = ()> !RefUnwindSafe for TCPServer<State>

§

impl<State> Send for TCPServer<State>

§

impl<State = ()> !Sync for TCPServer<State>

§

impl<State> Unpin for TCPServer<State>
where State: Unpin,

§

impl<State = ()> !UnwindSafe for TCPServer<State>

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> 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<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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<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> ErasedDestructor for T
where T: 'static,