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]]
name = "servers"
version = "0.2.0"
version = "0.3.0-pre"
dependencies = [
"anyhow",
"async-trait",

View File

@ -4,7 +4,7 @@ members = ["plugin_test"]
[package]
name = "servers"
description = "Simple TCP server for clients written in Rust with plugins support"
version = "0.2.0"
version = "0.3.0-pre"
license = "MIT"
authors = ["MedzikUser <nivua1fn@duck.com>"]
homepage = "https://github.com/MedzikUser/servers"
@ -24,8 +24,8 @@ better-panic = "0.3.0"
libloading = "0.7.3"
tokio-tungstenite = "0.17.2"
tungstenite = "0.17.3"
tracing-subscriber = "0.3.15"
tracing = "0.1.35"
clap = { version = "3.2.15", features = ["derive"] }
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
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 cli::Cli;
use servers::{
plugins::loader,
tcp::{handle_connection, handle_websocket, Client},
};
use tokio::net::TcpListener;
use tracing::{info, error};
use tracing::{error, info};
#[derive(Parser)]
#[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,
}
mod cli;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
@ -54,25 +17,25 @@ async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt().init();
// parse cli args
let cli = Cli::parse();
let args = Cli::parse();
// if enabled start WebSocket server
if !cli.ws_disable {
if !args.ws_disable {
tokio::spawn(start_ws_server(
cli.host.clone(),
cli.ws_port,
cli.port.clone(),
args.host.clone(),
args.ws_port,
args.port.clone(),
));
}
// start tcp server
start_tcp_server(cli.host, cli.port).await?;
start_tcp_server(&args.host, &args.port).await?;
Ok(())
}
/// 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
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
panic!("Server unexpectedly terminated!")
panic!("TCP server unexpectedly terminated!")
}
/// 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
panic!("Server unexpectedly terminated!")
panic!("WebSocket server unexpectedly terminated!")
}