async fn check_update_score(self) {
        let server_score = match self.server_type {
            ServerType::Tcp => self.server.tcp_score(),
            ServerType::Udp => self.server.udp_score(),
        };

        let (score, stat_data) = match self.check_delay().await {
            Ok(d) => server_score.push_score_fetch_statistic(Score::Latency(d)).await,
            // Penalty
            Err(..) => server_score.push_score_fetch_statistic(Score::Errored).await,
        };

        if stat_data.fail_rate > 0.8 {
            warn!(
                "balancer: checked & updated remote {} server {} (score: {}), {:?}",
                self.server_type,
                ServerConfigFormatter::new(self.server.server_config()),
                score,
                stat_data,
            );
        } else {
            debug!(
                "balancer: checked & updated remote {} server {} (score: {}), {:?}",
                self.server_type,
                ServerConfigFormatter::new(self.server.server_config()),
                score,
                stat_data,
            );
        }
    }
Checks server's score and update into `ServerScore<E>`
crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs