chore: move struct Cli to other module

This commit is contained in:
MedzikUser 2022-07-29 12:12:13 +02:00
parent 796084d13e
commit e83a8360c2
No known key found for this signature in database
GPG Key ID: A5FAC1E185C112DB
4 changed files with 59 additions and 53 deletions

2
Cargo.lock generated
View File

@ -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",

View File

@ -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
View 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,
}

View File

@ -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!")
} }