Skip to main content

HydraClient

Struct HydraClient 

Source
pub struct HydraClient { /* private fields */ }
Expand description

HydraClient connects to the relay server as a producer or consumer, performs handshake, and sends/receives encrypted frames. It maintains an internal memory pool (18 mb) for zero-copy encryption/decryption and buffering. The broadcast method allows producers to send encrypted frames to all connected consumers in the same session, while the recv method allows consumers to receive and decrypt frames from the producer.

Implementations§

Source§

impl HydraClient

Source

pub async fn connect_producer( addr: SocketAddr, session_id: &[u8; 64], session_key: [u8; 32], ) -> Result<Self>

Connects to the relay server, performs handshake, and sends a join frame with the producer role and session_id.

Source

pub async fn broadcast(&mut self, data: &[u8]) -> Result<()>

Broadcasts the given data as an encrypted frame to all connected consumers (zero-copy) in the same session. broadcast is only available for producers and will return an error if called on a consumer client.

Source

pub async fn connect_consumer( addr: SocketAddr, session_id: &[u8; 64], session_key: [u8; 32], ) -> Result<Self>

Connects to the relay server, performs handshake, and sends a join frame with the consumer role and session_id.

Source

pub async fn recv(&mut self) -> Result<&[u8]>

Receives the next encrypted frame from the producer, decrypts it, and returns the plaintext data as a byte slice. The returned slice is valid until the next call to recv or broadcast, which may reuse the internal memory pool buffer. recv is only available for consumers and will return an error if called on a producer client.

Source

pub async fn server_status(&mut self) -> Result<()>

Queries the relay server for current status, returns total connected clients and active sessions.

Source

pub async fn close(&mut self) -> Result<()>

Closes the client connection gracefully by flushing and shutting down the writer (proper FIN).

Auto Trait Implementations§

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