Skip to main content

BlockHandler

Struct BlockHandler 

Source
pub struct BlockHandler {
    pub current_context_id: RefCell<OutgoingContextId>,
    pub block_cache: RefCell<HashMap<IncomingEndpointContextId, ScopeContext>>,
    pub incoming_sections_sender: RefCell<UnboundedSender<IncomingSection>>,
    pub section_observers: RefCell<HashMap<(IncomingContextId, IncomingSectionIndex), Box<dyn FnMut(IncomingSection)>>>,
    pub incoming_blocks_history: RefCell<RingMap<BlockId, BlockHistoryData, RandomState>>,
}

Fields§

§current_context_id: RefCell<OutgoingContextId>§block_cache: RefCell<HashMap<IncomingEndpointContextId, ScopeContext>>

a map of active request scopes for incoming blocks

§incoming_sections_sender: RefCell<UnboundedSender<IncomingSection>>

a queue of incoming request scopes the scopes can be retrieved from the request_scopes map

§section_observers: RefCell<HashMap<(IncomingContextId, IncomingSectionIndex), Box<dyn FnMut(IncomingSection)>>>

a map of observers for incoming response blocks (by context_id + block_index) contains an observer callback and an optional queue of blocks if the response block is a multi-block stream

§incoming_blocks_history: RefCell<RingMap<BlockId, BlockHistoryData, RandomState>>

history of all incoming blocks

Implementations§

Source§

impl BlockHandler

Source

pub fn init( incoming_sections_sender: UnboundedSender<IncomingSection>, ) -> BlockHandler

Source

pub fn add_block_id_to_history( &self, block_id: BlockId, original_socket_uuid: Option<ComInterfaceSocketUUID>, )

Adds a block to the history of incoming blocks if the block is not already in the history returns true if the block was added and not already in the history

Source

pub fn is_block_in_history(&self, block: &DXBBlock) -> bool

Checks if a block is already in the history

Source

pub fn get_block_data_from_history( &self, block: &DXBBlock, ) -> Option<BlockHistoryData>

Source

pub fn handle_incoming_block(&self, block: DXBBlock)

Handles an incoming block by either putting it into the request queue or calling the observer for the block if it is a response block

Source

pub fn get_new_context_id(&self) -> OutgoingContextId

Source

pub fn register_incoming_block_observer( &self, context_id: OutgoingContextId, section_index: OutgoingSectionIndex, ) -> UnboundedReceiver<IncomingSection>

Adds a new observer for incoming blocks with a specific scope id and block index Returns a receiver that can be awaited to get the incoming sections

Source

pub async fn wait_for_incoming_response_block( &self, context_id: OutgoingContextId, section_index: OutgoingSectionIndex, ) -> Option<IncomingSection>

Waits for incoming response block with a specific scope id and block index

Trait Implementations§

Source§

impl Debug for BlockHandler

Source§

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

Formats the value using the given formatter. Read more

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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.