mirror of
https://github.com/MedzikUser/servers
synced 2024-08-14 23:57:48 +00:00
chore: move struct Cli to other module
This commit is contained in:
parent
796084d13e
commit
e83a8360c2
4 changed files with 59 additions and 53 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -564,7 +564,7 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servers"
|
name = "servers"
|
||||||
version = "0.2.0"
|
version = "0.3.0-pre"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|
|
@ -4,7 +4,7 @@ members = ["plugin_test"]
|
||||||
[package]
|
[package]
|
||||||
name = "servers"
|
name = "servers"
|
||||||
description = "Simple TCP server for clients written in Rust with plugins support"
|
description = "Simple TCP server for clients written in Rust with plugins support"
|
||||||
version = "0.2.0"
|
version = "0.3.0-pre"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
authors = ["MedzikUser <nivua1fn@duck.com>"]
|
authors = ["MedzikUser <nivua1fn@duck.com>"]
|
||||||
homepage = "https://github.com/MedzikUser/servers"
|
homepage = "https://github.com/MedzikUser/servers"
|
||||||
|
@ -24,8 +24,8 @@ better-panic = "0.3.0"
|
||||||
libloading = "0.7.3"
|
libloading = "0.7.3"
|
||||||
tokio-tungstenite = "0.17.2"
|
tokio-tungstenite = "0.17.2"
|
||||||
tungstenite = "0.17.3"
|
tungstenite = "0.17.3"
|
||||||
|
tracing-subscriber = "0.3.15"
|
||||||
|
tracing = "0.1.35"
|
||||||
clap = { version = "3.2.15", features = ["derive"] }
|
clap = { version = "3.2.15", features = ["derive"] }
|
||||||
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
|
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
|
||||||
tokio = { version = "1.20.1", features = ["rt-multi-thread", "macros", "net"] }
|
tokio = { version = "1.20.1", features = ["rt-multi-thread", "macros", "net"] }
|
||||||
tracing-subscriber = "0.3.15"
|
|
||||||
tracing = "0.1.35"
|
|
||||||
|
|
43
src/cli.rs
Normal file
43
src/cli.rs
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
#[derive(Parser)]
|
||||||
|
#[clap(
|
||||||
|
name = "servers",
|
||||||
|
version = env!("CARGO_PKG_VERSION"),
|
||||||
|
about = "A simple TCP server for client which can be extended with plugins."
|
||||||
|
)]
|
||||||
|
pub struct Cli {
|
||||||
|
#[clap(
|
||||||
|
short = 'h',
|
||||||
|
long = "host",
|
||||||
|
default_value = "0.0.0.0",
|
||||||
|
help = "Tcp server host",
|
||||||
|
display_order = 1
|
||||||
|
)]
|
||||||
|
pub host: String,
|
||||||
|
|
||||||
|
#[clap(
|
||||||
|
short = 'p',
|
||||||
|
long = "port",
|
||||||
|
default_value = "9999",
|
||||||
|
help = "Tcp server port [set 0 to random]",
|
||||||
|
display_order = 2
|
||||||
|
)]
|
||||||
|
pub port: String,
|
||||||
|
|
||||||
|
#[clap(
|
||||||
|
short = 'w',
|
||||||
|
long = "ws-port",
|
||||||
|
default_value = "9998",
|
||||||
|
help = "WebSocket server port [set 0 to random]",
|
||||||
|
display_order = 3
|
||||||
|
)]
|
||||||
|
pub ws_port: String,
|
||||||
|
|
||||||
|
#[clap(
|
||||||
|
long = "disable-websocket",
|
||||||
|
help = "Disable WebSocket proxy to Tcp",
|
||||||
|
display_order = 4
|
||||||
|
)]
|
||||||
|
pub ws_disable: bool,
|
||||||
|
}
|
61
src/main.rs
61
src/main.rs
|
@ -1,50 +1,13 @@
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use cli::Cli;
|
||||||
use servers::{
|
use servers::{
|
||||||
plugins::loader,
|
plugins::loader,
|
||||||
tcp::{handle_connection, handle_websocket, Client},
|
tcp::{handle_connection, handle_websocket, Client},
|
||||||
};
|
};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
use tracing::{info, error};
|
use tracing::{error, info};
|
||||||
|
|
||||||
#[derive(Parser)]
|
mod cli;
|
||||||
#[clap(
|
|
||||||
name = "servers",
|
|
||||||
about = "A simple TCP server for client which can be extended with plugins."
|
|
||||||
)]
|
|
||||||
struct Cli {
|
|
||||||
#[clap(
|
|
||||||
short = 'h',
|
|
||||||
long = "host",
|
|
||||||
default_value = "0.0.0.0",
|
|
||||||
help = "Tcp server host",
|
|
||||||
display_order = 1
|
|
||||||
)]
|
|
||||||
host: String,
|
|
||||||
#[clap(
|
|
||||||
short = 'p',
|
|
||||||
long = "port",
|
|
||||||
default_value = "9999",
|
|
||||||
help = "Tcp server port [set 0 to random]",
|
|
||||||
display_order = 2
|
|
||||||
)]
|
|
||||||
port: String,
|
|
||||||
|
|
||||||
#[clap(
|
|
||||||
short = 'w',
|
|
||||||
long = "ws-port",
|
|
||||||
default_value = "9998",
|
|
||||||
help = "WebSocket server port [set 0 to random]",
|
|
||||||
display_order = 3
|
|
||||||
)]
|
|
||||||
ws_port: String,
|
|
||||||
|
|
||||||
#[clap(
|
|
||||||
long = "disable-websocket",
|
|
||||||
help = "Disable WebSocket proxy to Tcp",
|
|
||||||
display_order = 4
|
|
||||||
)]
|
|
||||||
ws_disable: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
|
@ -54,25 +17,25 @@ async fn main() -> anyhow::Result<()> {
|
||||||
tracing_subscriber::fmt().init();
|
tracing_subscriber::fmt().init();
|
||||||
|
|
||||||
// parse cli args
|
// parse cli args
|
||||||
let cli = Cli::parse();
|
let args = Cli::parse();
|
||||||
|
|
||||||
// if enabled start WebSocket server
|
// if enabled start WebSocket server
|
||||||
if !cli.ws_disable {
|
if !args.ws_disable {
|
||||||
tokio::spawn(start_ws_server(
|
tokio::spawn(start_ws_server(
|
||||||
cli.host.clone(),
|
args.host.clone(),
|
||||||
cli.ws_port,
|
args.ws_port,
|
||||||
cli.port.clone(),
|
args.port.clone(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// start tcp server
|
// start tcp server
|
||||||
start_tcp_server(cli.host, cli.port).await?;
|
start_tcp_server(&args.host, &args.port).await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Start tcp server
|
/// Start tcp server
|
||||||
async fn start_tcp_server(host: String, port: String) -> anyhow::Result<()> {
|
async fn start_tcp_server(host: &str, port: &str) -> anyhow::Result<()> {
|
||||||
// listen Tcp server
|
// listen Tcp server
|
||||||
let listener = TcpListener::bind(format!("{host}:{port}")).await?;
|
let listener = TcpListener::bind(format!("{host}:{port}")).await?;
|
||||||
|
|
||||||
|
@ -98,7 +61,7 @@ async fn start_tcp_server(host: String, port: String) -> anyhow::Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// server for a unexpectedly reason be terminated
|
// server for a unexpectedly reason be terminated
|
||||||
panic!("Server unexpectedly terminated!")
|
panic!("TCP server unexpectedly terminated!")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Start WebSocket server
|
/// Start WebSocket server
|
||||||
|
@ -122,5 +85,5 @@ async fn start_ws_server(host: String, port: String, tcp_port: String) -> anyhow
|
||||||
}
|
}
|
||||||
|
|
||||||
// server for a unexpectedly reason be terminated
|
// server for a unexpectedly reason be terminated
|
||||||
panic!("Server unexpectedly terminated!")
|
panic!("WebSocket server unexpectedly terminated!")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue