Skip to main content

MessageHandler

Struct MessageHandler 

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

Handles incoming WebSocket messages

Implementations§

Source§

impl MessageHandler

Source

pub fn new( orderbooks: Arc<RwLock<HashMap<String, LocalOrderbook>>>, user_states: Arc<RwLock<HashMap<String, UserState>>>, price_histories: Arc<RwLock<HashMap<PriceHistoryKey, PriceHistory>>>, subscribed_user: Arc<RwLock<Option<String>>>, ) -> Self

Create a new message handler with shared state

Source

pub async fn handle_message(&self, text: &str) -> Vec<WsEvent>

Handle an incoming message and return events

Source

pub async fn init_orderbook(&self, orderbook_id: &str)

Initialize orderbook state for a subscription.

This must be called before subscribing to orderbook updates to ensure the local state exists when the first snapshot arrives. If not called, the handler will create the state on first message, but there may be a brief window where get_orderbook() returns None.

Uses atomic entry API to avoid race conditions with message handlers. Thread-safe: multiple concurrent calls are safe due to interior write lock.

Source

pub async fn init_user_state(&self, user: &str)

Initialize user state for a subscription.

This must be called before subscribing to user events to ensure state is ready when the first event arrives. Also sets the tracked user for this connection (single user per connection model).

Thread-safe: uses interior write locks for both the subscribed user tracking and the user state map. Multiple concurrent calls are safe but will serialize on lock acquisition. State mutations from incoming events are applied atomically via the same lock.

Source

pub async fn clear_subscribed_user(&self, user: &str)

Clear the subscribed user

Source

pub async fn init_price_history( &self, orderbook_id: &str, resolution: &str, include_ohlcv: bool, )

Initialize price history state for a subscription.

Creates an empty price history container for the given orderbook and resolution. The actual price data will be populated when the snapshot message arrives from the server.

§Arguments
  • orderbook_id - The orderbook identifier (e.g., “BTC-USD:main”)
  • resolution - The candle resolution (e.g., “1m”, “5m”, “1h”, “1d”)
  • include_ohlcv - Whether OHLCV candle data should be tracked
§Example
handler.init_price_history("BTC-USD:main", "1m", true).await;
Source

pub async fn clear_orderbook(&self, orderbook_id: &str)

Clear orderbook state

Source

pub async fn clear_user_state(&self, user: &str)

Clear user state

Source

pub async fn clear_price_history(&self, orderbook_id: &str, resolution: &str)

Clear price history state

Source

pub async fn clear_all(&self)

Clear all state

Trait Implementations§

Source§

impl Debug for MessageHandler

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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