This commit is contained in:
open-trade 2021-03-19 16:38:10 +08:00
parent 5f1259e131
commit fc7f790def
4 changed files with 47 additions and 18 deletions

View File

@ -1,12 +1,10 @@
use clap::App; use clap::App;
mod relay_server; mod relay_server;
use hbb_common::{env_logger::*, tokio, ResultType}; use hbb_common::{env_logger::*, ResultType};
use relay_server::start; use relay_server::*;
use std::sync::{Arc, Mutex};
const DEFAULT_PORT: &'static str = "21117"; fn main() -> ResultType<()> {
#[tokio::main]
async fn main() -> ResultType<()> {
init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info")); init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info"));
let args = format!( let args = format!(
"-p, --port=[NUMBER(default={})] 'Sets the listening port'", "-p, --port=[NUMBER(default={})] 'Sets the listening port'",
@ -18,6 +16,7 @@ async fn main() -> ResultType<()> {
.about("RustDesk Relay Server") .about("RustDesk Relay Server")
.args_from_usage(&args) .args_from_usage(&args)
.get_matches(); .get_matches();
start(matches.value_of("port").unwrap_or(DEFAULT_PORT)).await?; let stop: Arc<Mutex<bool>> = Default::default();
start(matches.value_of("port").unwrap_or(DEFAULT_PORT), stop)?;
Ok(()) Ok(())
} }

View File

@ -4,7 +4,11 @@ use hbb_common::{
rendezvous_proto::*, rendezvous_proto::*,
sleep, sleep,
tcp::{new_listener, FramedStream}, tcp::{new_listener, FramedStream},
tokio, ResultType, tokio::{
self,
time::{interval, Duration},
},
ResultType,
}; };
use std::{ use std::{
collections::HashMap, collections::HashMap,
@ -16,9 +20,13 @@ lazy_static::lazy_static! {
static ref PEERS: Arc<Mutex<HashMap<String, FramedStream>>> = Arc::new(Mutex::new(HashMap::new())); static ref PEERS: Arc<Mutex<HashMap<String, FramedStream>>> = Arc::new(Mutex::new(HashMap::new()));
} }
pub async fn start(port: &str) -> ResultType<()> { pub const DEFAULT_PORT: &'static str = "21117";
#[tokio::main(basic_scheduler)]
pub async fn start(port: &str, stop: Arc<Mutex<bool>>) -> ResultType<()> {
let addr = format!("0.0.0.0:{}", port); let addr = format!("0.0.0.0:{}", port);
log::info!("Listening on {}", addr); log::info!("Listening on {}", addr);
let mut timer = interval(Duration::from_millis(300));
let mut listener = new_listener(addr, false).await?; let mut listener = new_listener(addr, false).await?;
loop { loop {
tokio::select! { tokio::select! {
@ -27,8 +35,15 @@ pub async fn start(port: &str) -> ResultType<()> {
make_pair(FramedStream::from(stream), addr).await.ok(); make_pair(FramedStream::from(stream), addr).await.ok();
}); });
} }
_ = timer.tick() => {
if *stop.lock().unwrap() {
log::info!("Stopped");
break;
} }
} }
}
}
Ok(())
} }
async fn make_pair(stream: FramedStream, addr: SocketAddr) -> ResultType<()> { async fn make_pair(stream: FramedStream, addr: SocketAddr) -> ResultType<()> {

View File

@ -2,13 +2,12 @@
// https://blog.csdn.net/bytxl/article/details/44344855 // https://blog.csdn.net/bytxl/article/details/44344855
use clap::App; use clap::App;
use hbb_common::{env_logger::*, log, tokio, ResultType}; use hbb_common::{env_logger::*, log, ResultType};
use hbbs::*; use hbbs::*;
use ini::Ini; use ini::Ini;
const DEFAULT_PORT: &'static str = "21116"; use std::sync::{Arc, Mutex};
#[tokio::main] fn main() -> ResultType<()> {
async fn main() -> ResultType<()> {
init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info")); init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info"));
let args = format!( let args = format!(
"-c --config=[FILE] +takes_value 'Sets a custom config file' "-c --config=[FILE] +takes_value 'Sets a custom config file'
@ -72,12 +71,11 @@ async fn main() -> ResultType<()> {
.map(|x| x.to_owned()) .map(|x| x.to_owned())
.collect(); .collect();
let addr = format!("0.0.0.0:{}", port); let addr = format!("0.0.0.0:{}", port);
log::info!("Listening on {}", addr);
let addr2 = format!("0.0.0.0:{}", port.parse::<i32>().unwrap_or(0) - 1); let addr2 = format!("0.0.0.0:{}", port.parse::<i32>().unwrap_or(0) - 1);
log::info!("Listening on {}, extra port for NAT test", addr2);
log::info!("relay-servers={:?}", relay_servers); log::info!("relay-servers={:?}", relay_servers);
log::info!("serial={}", serial); log::info!("serial={}", serial);
log::info!("rendezvous-servers={:?}", rendezvous_servers); log::info!("rendezvous-servers={:?}", rendezvous_servers);
let stop: Arc<Mutex<bool>> = Default::default();
RendezvousServer::start( RendezvousServer::start(
&addr, &addr,
&addr2, &addr2,
@ -85,7 +83,7 @@ async fn main() -> ResultType<()> {
serial, serial,
rendezvous_servers, rendezvous_servers,
get_arg("software-url", ""), get_arg("software-url", ""),
) stop,
.await?; )?;
Ok(()) Ok(())
} }

View File

@ -11,7 +11,12 @@ use hbb_common::{
rendezvous_proto::*, rendezvous_proto::*,
tcp::{new_listener, FramedStream}, tcp::{new_listener, FramedStream},
timeout, timeout,
tokio::{self, net::TcpStream, sync::mpsc}, tokio::{
self,
net::TcpStream,
sync::mpsc,
time::{interval, Duration},
},
tokio_util::codec::Framed, tokio_util::codec::Framed,
udp::FramedSocket, udp::FramedSocket,
AddrMangle, ResultType, AddrMangle, ResultType,
@ -61,6 +66,8 @@ struct PeerMap {
db: super::SledAsync, db: super::SledAsync,
} }
pub const DEFAULT_PORT: &'static str = "21116";
impl PeerMap { impl PeerMap {
fn new() -> ResultType<Self> { fn new() -> ResultType<Self> {
Ok(Self { Ok(Self {
@ -135,6 +142,7 @@ pub struct RendezvousServer {
} }
impl RendezvousServer { impl RendezvousServer {
#[tokio::main(basic_scheduler)]
pub async fn start( pub async fn start(
addr: &str, addr: &str,
addr2: &str, addr2: &str,
@ -142,6 +150,7 @@ impl RendezvousServer {
serial: i32, serial: i32,
rendezvous_servers: Vec<String>, rendezvous_servers: Vec<String>,
software_url: String, software_url: String,
stop: Arc<Mutex<bool>>,
) -> ResultType<()> { ) -> ResultType<()> {
let mut socket = FramedSocket::new(addr).await?; let mut socket = FramedSocket::new(addr).await?;
let (tx, mut rx) = mpsc::unbounded_channel::<(RendezvousMessage, SocketAddr)>(); let (tx, mut rx) = mpsc::unbounded_channel::<(RendezvousMessage, SocketAddr)>();
@ -161,8 +170,15 @@ impl RendezvousServer {
}; };
let mut listener = new_listener(addr, false).await?; let mut listener = new_listener(addr, false).await?;
let mut listener2 = new_listener(addr2, false).await?; let mut listener2 = new_listener(addr2, false).await?;
let mut timer = interval(Duration::from_millis(300));
loop { loop {
tokio::select! { tokio::select! {
_ = timer.tick() => {
if *stop.lock().unwrap() {
log::info!("Stopped");
break;
}
}
Some((msg, addr)) = rx.recv() => { Some((msg, addr)) = rx.recv() => {
allow_err!(socket.send(&msg, addr).await); allow_err!(socket.send(&msg, addr).await);
} }
@ -274,6 +290,7 @@ impl RendezvousServer {
} }
} }
} }
Ok(())
} }
#[inline] #[inline]