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
impl DcPool
Sourcepub fn new(
home_dc_id: i32,
dc_entries: &[DcEntry],
socks5: Option<Socks5Config>,
transport: TransportKind,
) -> Self
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.
Sourcepub fn has_connection(&self, dc_id: i32) -> bool
pub fn has_connection(&self, dc_id: i32) -> bool
Returns true if at least one connection slot exists for dc_id.
Sourcepub fn insert(&mut self, dc_id: i32, conn: DcConnection)
pub fn insert(&mut self, dc_id: i32, conn: DcConnection)
Insert a pre-built, already initialized connection into the pool as a new slot.
Sourcepub fn evict(&mut self, dc_id: i32)
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).
Sourcepub async fn invoke_on_dc<R: RemoteCall>(
&mut self,
dc_id: i32,
_dc_entries: &[DcEntry],
req: &R,
) -> Result<Vec<u8>, InvocationError>
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.
Sourcepub fn mark_init_done(&mut self, dc_id: i32)
pub fn mark_init_done(&mut self, dc_id: i32)
Mark a DC as having completed initConnection.
Sourcepub fn is_init_done(&self, dc_id: i32) -> bool
pub fn is_init_done(&self, dc_id: i32) -> bool
Returns true if this DC has already received initConnection this session.
Sourcepub async fn invoke_on_dc_serializable<S: Serializable>(
&mut self,
dc_id: i32,
req: &S,
) -> Result<Vec<u8>, InvocationError>
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.
Sourcepub fn update_addrs(&mut self, entries: &[DcEntry])
pub fn update_addrs(&mut self, entries: &[DcEntry])
Update the address table (called after initConnection).
Sourcepub fn collect_keys(&self, entries: &mut [DcEntry])
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).