引入shell模块
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user