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::data::Router as RouterData;
use crate::protocol::{Hello, PeerQuality}; use crate::protocol::{Hello, PeerQuality};
use crate::settings::{Settings, HISTORY, INTERVAL, TIMEOUT}; use crate::settings::{HISTORY, INTERVAL, Settings, TIMEOUT};
use average::Mean; use average::Mean;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::net::{IpAddr, SocketAddr}; use std::net::{IpAddr, SocketAddr};
...@@ -26,10 +26,7 @@ impl Router { ...@@ -26,10 +26,7 @@ impl Router {
} }
pub fn new(data: &RouterData, config: &Settings) -> Router { pub fn new(data: &RouterData, config: &Settings) -> Router {
Router { Router {
link_address: SocketAddr::new( link_address: SocketAddr::new(IpAddr::from([10, 200, data.id, config.id]), config.bind.port()),
IpAddr::from([10, 200, data.id, config.id]),
config.bind.port(),
),
quality: PeerQuality { quality: PeerQuality {
reliability: 0, reliability: 0,
jitter: 0, jitter: 0,
...@@ -70,10 +67,7 @@ impl Router { ...@@ -70,10 +67,7 @@ impl Router {
} }
self.remote_time = data.time; self.remote_time = data.time;
self.local_time = SystemTime::now() self.local_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_millis() as u16;
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap()
.as_millis() as u16;
let delay = self.local_time.wrapping_sub(self.remote_time) as i16; let delay = self.local_time.wrapping_sub(self.remote_time) as i16;
...@@ -87,22 +81,13 @@ impl Router { ...@@ -87,22 +81,13 @@ impl Router {
assert!(!received.is_empty()); // 因为走到这里一定刚放过一个进去 assert!(!received.is_empty()); // 因为走到这里一定刚放过一个进去
self.quality.reliability = (received.len() * 255 / HISTORY as usize) as u8; self.quality.reliability = (received.len() * 255 / HISTORY as usize) as u8;
self.quality.delay = received self.quality.delay = received.iter().map(|&x| f64::from(x)).collect::<Mean>().mean() as i16;
.iter() self.quality.jitter = (1..received.len()).map(|i| f64::from(received[i].abs_diff(received[i - 1]))).collect::<Mean>().mean() as u8;
.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 { pub(crate) fn update(&mut self, local_time: u16) -> PeerQuality {
if self.quality.reliability > 0 { if self.quality.reliability > 0 {
let diff = (local_time.wrapping_sub(self.local_time) as i16 as f64 let diff = (local_time.wrapping_sub(self.local_time) as i16 as f64 / INTERVAL.as_millis() as f64).round() as i16;
/ INTERVAL.as_millis() as f64)
.round() as i16;
// 有几个包没到 // 有几个包没到
if diff > TIMEOUT.as_millis() as i16 { if diff > TIMEOUT.as_millis() as i16 {
......
...@@ -15,7 +15,7 @@ pub struct Settings { ...@@ -15,7 +15,7 @@ pub struct Settings {
} }
pub const INTERVAL: Duration = Duration::from_secs(1); 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 const HISTORY: u8 = 100;
// pub static ref CONFIG: Settings = Config::builder() // 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