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

Build an empty pool for home_dc_id, seeded with addresses for every DC in dc_entries. No connections are opened yet; slots get created lazily on first use of each DC.

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, already initialized 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 connection failure to force reconnection on the next call).

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.

On connection death or a -404 (auth key gone), this evicts the dead slot and returns the error as-is – it does not reconnect and resend itself. DcPool has no api_id/device info to build invokeWithLayer(initConnection(...)), so it can’t safely redo setup on its own. The caller sees !pool.has_connection(dc_id) after this returns and is expected to redo full setup – cached auth key, InitConnection, and (for foreign DCs) auth.importAuthorization – before retrying.

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. Same evict-and-propagate behavior as invoke_on_dc – see its doc comment.

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