Skip to main content

futu_backend/auth/broker/
route_cache.rs

1use std::sync::{Arc, Mutex};
2
3use futu_domain_broker_reconnect::{BrokerAuthRouteState, BrokerAuthStage};
4
5/// C++ `FTAuthImpl` 的 broker-auth 成功阶段缓存。
6///
7/// 纯单槽状态在 `futu-domain-broker-reconnect::BrokerAuthRouteState`,这里
8/// 只保留 backend runtime 需要的共享并发包装。
9#[derive(Debug, Clone, Default)]
10pub struct BrokerAuthRouteCache {
11    inner: Arc<Mutex<BrokerAuthRouteState>>,
12}
13
14impl BrokerAuthRouteCache {
15    pub(crate) fn preferred_stage(&self, original_domain: &str) -> Option<BrokerAuthStage> {
16        let guard = self
17            .inner
18            .lock()
19            .unwrap_or_else(|poisoned| poisoned.into_inner());
20        guard.preferred_stage(original_domain)
21    }
22
23    pub(crate) fn cached_retry_ip(&self, original_domain: &str) -> Option<String> {
24        let guard = self
25            .inner
26            .lock()
27            .unwrap_or_else(|poisoned| poisoned.into_inner());
28        guard.cached_retry_ip(original_domain)
29    }
30
31    pub(crate) fn record_success(
32        &self,
33        original_domain: &str,
34        stage: BrokerAuthStage,
35        retry_ip: Option<String>,
36    ) {
37        let mut guard = self
38            .inner
39            .lock()
40            .unwrap_or_else(|poisoned| poisoned.into_inner());
41        guard.record_success(original_domain, stage, retry_ip);
42    }
43}