Commit 94e98c1e authored by nanamicat's avatar nanamicat

timeout

parent 53b6474b
Pipeline #42074 passed with stages
in 2 minutes and 39 seconds
use crate::data::Router as RouterData;
use crate::protocol::{Hello, PeerQuality};
use crate::settings::{Settings, HISTORY, INTERVAL, TIMEOUT};
use crate::settings::{HISTORY, INTERVAL, Settings, TIMEOUT};
use average::Mean;
use std::collections::BTreeMap;
use std::net::{IpAddr, SocketAddr};
......@@ -26,10 +26,7 @@ impl Router {
}
pub fn new(data: &RouterData, config: &Settings) -> Router {
Router {
link_address: SocketAddr::new(
IpAddr::from([10, 200, data.id, config.id]),
config.bind.port(),
),
link_address: SocketAddr::new(IpAddr::from([10, 200, data.id, config.id]), config.bind.port()),
quality: PeerQuality {
reliability: 0,
jitter: 0,
......@@ -70,10 +67,7 @@ impl Router {
}
self.remote_time = data.time;
self.local_time = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap()
.as_millis() as u16;
self.local_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_millis() as u16;
let delay = self.local_time.wrapping_sub(self.remote_time) as i16;
......@@ -87,22 +81,13 @@ impl Router {
assert!(!received.is_empty()); // 因为走到这里一定刚放过一个进去
self.quality.reliability = (received.len() * 255 / HISTORY as usize) as u8;
self.quality.delay = received
.iter()
.map(|&x| f64::from(x))
.collect::<Mean>()
.mean() as i16;
self.quality.jitter = (1..received.len())
.map(|i| f64::from(received[i].abs_diff(received[i - 1])))
.collect::<Mean>()
.mean() as u8;
self.quality.delay = received.iter().map(|&x| f64::from(x)).collect::<Mean>().mean() as i16;
self.quality.jitter = (1..received.len()).map(|i| f64::from(received[i].abs_diff(received[i - 1]))).collect::<Mean>().mean() as u8;
}
pub(crate) fn update(&mut self, local_time: u16) -> PeerQuality {
if self.quality.reliability > 0 {
let diff = (local_time.wrapping_sub(self.local_time) as i16 as f64
/ INTERVAL.as_millis() as f64)
.round() as i16;
let diff = (local_time.wrapping_sub(self.local_time) as i16 as f64 / INTERVAL.as_millis() as f64).round() as i16;
// 有几个包没到
if diff > TIMEOUT.as_millis() as i16 {
......
......@@ -15,7 +15,7 @@ pub struct Settings {
}
pub const INTERVAL: Duration = Duration::from_secs(1);
pub const TIMEOUT: Duration = Duration::from_secs(10);
pub const TIMEOUT: Duration = Duration::from_secs(60);
pub const HISTORY: u8 = 100;
// pub static ref CONFIG: Settings = Config::builder()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment