引入shell模块

This commit is contained in:
2025-01-19 23:04:11 +08:00
parent 91b2892395
commit 232547b79e
6 changed files with 135 additions and 16 deletions

View File

@@ -8,11 +8,15 @@ use async_trait::async_trait;
use chrono::Local;
use colored::{Color, Colorize};
use fern::Dispatch;
use lazy_static::lazy_static;
use log::{Level, LevelFilter};
use std::sync::Arc;
use once_cell::sync::{Lazy, OnceCell};
use std::sync::{Arc, OnceLock};
use tokio::task::JoinHandle;
use LingTransmit::server::event::ServerEvent;
use LingTransmit::server::Client::Client;
use LingTransmit::server::Server;
use LingTransmit::shell::{register_command, start_shell, CommandActuators};
use LingTransmit::ssl::ServerCert;
#[tokio::main]
@@ -21,17 +25,30 @@ async fn main() {
let pri = include_bytes!("../../ssl/test.pem");
let passwd = include_str!("../../ssl/pass.txt");
init_log();
let server_cert = ServerCert::init_buffer_password(
&cert.to_vec(),
&pri.to_vec(),
passwd,
let server_cert = ServerCert::init_buffer_password(&cert.to_vec(), &pri.to_vec(), passwd)
.expect("解析证书失败");
let server = Arc::new(
Server::new_tcp("0.0.0.0:11451", server_cert, Arc::new(Event {}))
.await
.expect("启动服务端失败"),
);
let task = start_server(server.clone());
register_command(
"exit".to_string(),
Box::new(ExitCommand::new(server.clone())),
)
.expect("解析证书失败");
let server = Server::new_tcp("0.0.0.0:11451", server_cert, Arc::new(Event {}))
.await
.expect("启动服务失败");
server.start_accept().await;
.await
.expect("注册命令失败");
start_shell().await;
task.await.expect("关闭服务失败");
}
fn start_server(server: Arc<Server>) -> JoinHandle<()> {
tokio::spawn(async move {
server.start_accept().await;
})
}
fn get_time() -> String {
let now = Local::now();
now.format("%Y-%m-%d %H:%M:%S").to_string()
@@ -57,6 +74,24 @@ fn init_log() {
.apply();
}
struct ExitCommand {
server: Arc<Server>,
}
impl ExitCommand {
pub fn new(server: Arc<Server>) -> Self {
ExitCommand { server }
}
}
#[async_trait]
impl CommandActuators for ExitCommand {
async fn execute(&self, command: String) {
self.server.close().await;
self.exit_shell();
}
}
struct Event {}
#[async_trait]