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
pub fn new( home_dc_id: i32, dc_entries: &[DcEntry], socks5: Option<Socks5Config>, transport: TransportKind, ) -> Self
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 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 IO error to force reconnection).
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.
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.
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).
Auto Trait Implementations§
impl Freeze for DcPool
impl !RefUnwindSafe for DcPool
impl Send for DcPool
impl Sync for DcPool
impl Unpin for DcPool
impl UnsafeUnpin for DcPool
impl !UnwindSafe for DcPool
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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