mirror of
https://github.com/Bluemangoo/sekai-unpacker.git
synced 2026-09-20 00:06:52 +08:00
fix multi client
This commit is contained in:
+16
-11
@@ -16,6 +16,7 @@ use std::fs;
|
||||
use std::str::FromStr;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use tokio::task::JoinSet;
|
||||
use tokio::time::sleep;
|
||||
|
||||
#[tokio::main]
|
||||
@@ -39,7 +40,7 @@ async fn main() -> anyhow::Result<()> {
|
||||
let routers = Arc::new(build_routers());
|
||||
let http_server = Arc::new(Server::new(routers.clone()));
|
||||
|
||||
let mut tasks = vec![];
|
||||
let mut join_set = JoinSet::new();
|
||||
|
||||
for server_conf in &CONFIG.connect.server {
|
||||
let server_conf = server_conf.clone().into_tunnel_config(Identity::Server)?;
|
||||
@@ -47,7 +48,7 @@ async fn main() -> anyhow::Result<()> {
|
||||
let server = TunnelListener::bind(server_conf).await?;
|
||||
info!("tcp server started on {}", url);
|
||||
let http_server = http_server.clone();
|
||||
tasks.push(tokio::task::spawn(async move {
|
||||
join_set.spawn(async move {
|
||||
loop {
|
||||
let endpoint = server
|
||||
.accept()
|
||||
@@ -59,20 +60,23 @@ async fn main() -> anyhow::Result<()> {
|
||||
continue;
|
||||
};
|
||||
if let TunnelEndpoint::Server(connection) = endpoint {
|
||||
let result = http_server.on_conn(connection).await;
|
||||
if let Err(e) = result {
|
||||
error!("Failed to handle connection: {}", e);
|
||||
}
|
||||
let http_server = http_server.clone();
|
||||
tokio::task::spawn(async move {
|
||||
let result = http_server.on_conn(connection).await;
|
||||
if let Err(e) = result {
|
||||
error!("Failed to handle connection: {}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
for client_conf in &CONFIG.connect.client {
|
||||
let client_conf = client_conf.clone().into_tunnel_config(Identity::Server);
|
||||
let http_server = http_server.clone();
|
||||
info!("tcp client started for {}", client_conf.url);
|
||||
tasks.push(tokio::task::spawn(async move {
|
||||
join_set.spawn(async move {
|
||||
loop {
|
||||
let endpoint = connect_tunnel(client_conf.clone())
|
||||
.await
|
||||
@@ -90,11 +94,12 @@ async fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
sleep(Duration::from_secs(10)).await;
|
||||
}
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
for task in tasks {
|
||||
let _ = task.await.map_err(|e| error!("{}", e));
|
||||
while let Some(res) = join_set.join_next().await {
|
||||
let Err(e) = res;
|
||||
error!("{}", e);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in New Issue
Block a user