Commit 5c51e2b7 authored by nanamicat's avatar nanamicat

connection

parent 0624c872
use serde_derive::Deserialize;
#[derive(Deserialize)]
pub(crate) struct Connection {
pub metric: u32,
pub protocol: Schema,
}
#[derive(Deserialize)]
pub(crate) enum Schema {
IP,
UDP,
TCP,
}
use crate::connection::Connection;
use crate::data::Router as RouterData; use crate::data::Router as RouterData;
use crate::protocol::{Change, Hello, Report}; use crate::protocol::{Change, Hello, Report};
use crate::router::Router; use crate::router::Router;
...@@ -11,6 +12,7 @@ use std::time::SystemTime; ...@@ -11,6 +12,7 @@ use std::time::SystemTime;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
use tokio::time; use tokio::time;
mod connection;
mod data; mod data;
mod gateway_group; mod gateway_group;
mod protocol; mod protocol;
...@@ -31,6 +33,10 @@ async fn main() -> anyhow::Result<()> { ...@@ -31,6 +33,10 @@ async fn main() -> anyhow::Result<()> {
.iter() .iter()
.map(|r| (r.id, Router::new(r, &config))) .map(|r| (r.id, Router::new(r, &config)))
.collect(); .collect();
let connections = serde_json::from_slice::<HashMap<u8, HashMap<u8, Connection>>>(&fs::read(
"import/connections.json",
)?)?;
// let groups: Vec<GatewayGroup> = serde_json::from_slice(&fs::read("import/GatewayGroup.json")?)?; // let groups: Vec<GatewayGroup> = serde_json::from_slice(&fs::read("import/GatewayGroup.json")?)?;
let mut server = Server::new( let mut server = Server::new(
...@@ -79,17 +85,19 @@ async fn main() -> anyhow::Result<()> { ...@@ -79,17 +85,19 @@ async fn main() -> anyhow::Result<()> {
// to clients // to clients
hello.time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?.as_millis() as u16; hello.time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?.as_millis() as u16;
let message = bincode::encode_to_vec(&hello, bincode::config::standard())?; let message = bincode::encode_to_vec(&hello, bincode::config::standard())?;
for peer in routers.values() { for id in connections[&config.id].keys() {
let _ = socket.send_to(message.as_slice(), peer.link_address); let router = &routers[id];
let _ = socket.send_to(message.as_slice(), router.link_address);
} }
// to server // to server
let report = Report { let report = Report {
id: config.id, id: config.id,
ack: server.ack, ack: server.ack,
peers: routers peers: connections
.values_mut() .iter()
.map(|peer| peer.update(hello.time)) .filter(|(_, to)| to.contains_key(&config.id))
.map(|(from,_)|routers.get_mut(from).unwrap().update(hello.time))
.collect(), .collect(),
}; };
let message = bincode::encode_to_vec(&report, bincode::config::standard())?; let message = bincode::encode_to_vec(&report, bincode::config::standard())?;
......
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