Commit 18326b58 authored by nanamicat's avatar nanamicat

fix

parent 5f4d9da0
Pipeline #42144 passed with stages
in 3 minutes and 25 seconds
......@@ -2,9 +2,9 @@ use crate::api::create_app;
use crate::data::{ConnectionData, RouterData};
use crate::protocol::{Change, Report};
use crate::router::Router;
use crate::settings::{INTERVAL, Settings, TIMEOUT};
use ::config::Config;
use crate::settings::{Settings, INTERVAL, TIMEOUT};
use anyhow::Result;
use ::config::Config;
use config::Environment;
use net::SocketAddr;
use serde::Serialize;
......@@ -96,21 +96,18 @@ async fn main() -> Result<()> {
now = interval.tick() => {
let mut routers = routers.write().await;
if updating.router_id != 0 {
let router = routers.get_mut(&updating.router_id).expect("updating router_id should exist");
if now.duration_since(router.time) < TIMEOUT {
send(&updating.change, &mut buf, &socket, &router.addr.unwrap()).await?;
} else {
router.offline();
router.finish(&mut updating);
}
}
if updating.router_id == 0 {
for router in routers.values_mut() {
if router.addr != None && now.duration_since(router.time) > TIMEOUT {
router.offline();
router.finish(&mut updating);
}
}
if updating.router_id != 0 {
let router = routers.get_mut(&updating.router_id).expect("updating router_id should exist");
send(&updating.change, &mut buf, &socket, &router.addr.unwrap()).await?;
}
if updating.router_id == 0 {
tick(&mut routers, &mut cursor, &socket, &mut buf, &mut updating, &connections).await?
}
}
......
......@@ -83,16 +83,7 @@ impl Router {
pub fn on_message(&mut self, data: Report, addr: SocketAddr, updating: &mut UpdatingState) -> Option<Change> {
// 不带 syn, 序号正确:已经在线的,或者是上线流程走完
// 有 syn:客户端新上线;无 addr, 服务端新上线新上线,先把客户端标记为离线来走登录流程
if data.syn || self.addr == None {
self.offline();
self.finish(updating);
Some(Change {
seq: self.seq,
via: self.via.clone(),
plan: self.plan.clone(),
rst: true,
})
} else if data.ack == self.seq.wrapping_add(1) {
if !data.syn && data.ack == self.seq.wrapping_add(1) {
self.online(addr);
for (current, new) in self.peers.values_mut().zip(data.peers) {
*current = new
......@@ -102,6 +93,15 @@ impl Router {
self.finish(updating);
}
None
} else if data.syn || self.addr == None {
self.offline();
self.finish(updating);
Some(Change {
seq: self.seq,
via: self.via.clone(),
plan: self.plan.clone(),
rst: true,
})
} else {
tracing::info!("router {} wrong ack ack={}, seq={}", self.id, data.ack, self.seq);
// 序号不对的,忽略
......
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