Skip to main content

DcPool

Struct DcPool 

Source
pub struct DcPool {
    pub conns: HashMap<i32, Vec<Arc<ConnSlot>>>,
    /* private fields */
}
Expand description

Pool of per-DC authenticated connections. Each DC holds up to MAX_CONNS_PER_DC slots. The pool lock is dropped before any network I/O so concurrent callers don’t serialize on it.

Fields§

§conns: HashMap<i32, Vec<Arc<ConnSlot>>>

Per-DC connection slots; inner Vec holds slot Arcs.

Implementations§

Source§

impl DcPool

Source

pub fn new( home_dc_id: i32, dc_entries: &[DcEntry], socks5: Option<Socks5Config>, transport: TransportKind, ) -> Self

Source

pub fn has_connection(&self, dc_id: i32) -> bool

Returns true if at least one connection slot exists for dc_id.

Source

pub fn insert(&mut self, dc_id: i32, conn: DcConnection)

Insert a pre-built connection into the pool as a new slot.

Source

pub fn evict(&mut self, dc_id: i32)

Evict all slots for a DC (called on IO error to force reconnection).

Source

pub async fn invoke_on_dc<R: RemoteCall>( &mut self, dc_id: i32, _dc_entries: &[DcEntry], req: &R, ) -> Result<Vec<u8>, InvocationError>

Invoke a raw RPC call on the given DC. Pool lock is released before the network round-trip begins.

Source

pub fn mark_init_done(&mut self, dc_id: i32)

Mark a DC as having completed initConnection.

Source

pub fn is_init_done(&self, dc_id: i32) -> bool

Returns true if this DC has already received initConnection this session.

Source

pub async fn invoke_on_dc_serializable<S: Serializable>( &mut self, dc_id: i32, req: &S, ) -> Result<Vec<u8>, InvocationError>

Like invoke_on_dc but accepts any Serializable type.

Source

pub fn update_addrs(&mut self, entries: &[DcEntry])

Update the address table (called after initConnection).

Source

pub fn collect_keys(&self, entries: &mut [DcEntry])

Save the auth keys from pool connections back into the DC entry list. Uses the first slot per DC (all slots share the same auth key).

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