From d8917639afd4df41cbae7a7f514a2716914e764b Mon Sep 17 00:00:00 2001 From: Starpoles Date: Thu, 29 Jan 2026 01:57:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=BF=9C=E7=A8=8B=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 384 ++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 9 + build.rs | 65 +++++++ proto/message.proto | 17 ++ src/main.rs | 38 +++- src/manager.rs | 89 ++++++++++ src/protobuf/README.md | 5 + src/protobuf/gou.rs | 43 +++++ src/protobuf/mod.rs | 1 + 9 files changed, 649 insertions(+), 2 deletions(-) create mode 100644 build.rs create mode 100644 proto/message.proto create mode 100644 src/manager.rs create mode 100644 src/protobuf/README.md create mode 100644 src/protobuf/gou.rs create mode 100644 src/protobuf/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 7d0c10d..cc422e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,14 @@ version = "0.1.0" dependencies = [ "actix", "actix-web", + "actix-web-actors", "anyhow", + "chrono", + "colored", + "fern", + "log", + "prost", + "prost-build", "tokio", ] @@ -208,6 +215,24 @@ dependencies = [ "url", ] +[[package]] +name = "actix-web-actors" +version = "4.3.1+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98c5300b38fd004fe7d2a964f9a90813fdbe8a81fed500587e78b1b71c6f980" +dependencies = [ + "actix", + "actix-codec", + "actix-http", + "actix-web", + "bytes", + "bytestring", + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + [[package]] name = "actix-web-codegen" version = "4.3.0" @@ -261,12 +286,27 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "base64" version = "0.22.1" @@ -309,6 +349,12 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "bumpalo" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" + [[package]] name = "bytes" version = "1.11.0" @@ -342,6 +388,28 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chrono" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "colored" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "convert_case" version = "0.10.0" @@ -362,6 +430,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -458,6 +532,12 @@ dependencies = [ "syn", ] +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -483,12 +563,33 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fern" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29" +dependencies = [ + "log", +] + [[package]] name = "find-msvc-tools" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.1.8" @@ -591,12 +692,27 @@ dependencies = [ "tracing", ] +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "http" version = "0.2.12" @@ -620,6 +736,30 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icu_collections" version = "2.1.1" @@ -735,7 +875,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.1", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", ] [[package]] @@ -754,6 +903,16 @@ dependencies = [ "libc", ] +[[package]] +name = "js-sys" +version = "0.3.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "language-tags" version = "0.3.2" @@ -766,6 +925,12 @@ version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + [[package]] name = "litemap" version = "0.8.1" @@ -838,12 +1003,27 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + [[package]] name = "num-conv" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -879,6 +1059,17 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -921,6 +1112,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -930,6 +1131,57 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +dependencies = [ + "heck", + "itertools", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +dependencies = [ + "prost", +] + [[package]] name = "quote" version = "1.0.44" @@ -1027,6 +1279,25 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.22" @@ -1192,6 +1463,19 @@ dependencies = [ "syn", ] +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "time" version = "0.3.46" @@ -1369,12 +1653,110 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasm-bindgen" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/Cargo.toml b/Cargo.toml index cc95101..1271b5d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,14 @@ edition = "2024" [dependencies] actix = "0.13.5" actix-web = "4.12.1" +actix-web-actors = "4.3.1" anyhow = "1.0.100" +chrono = "0.4.43" +colored = "3.1.1" +fern = "0.7.1" +log = "0.4.29" +prost = "0.14.3" tokio = { version = "1.49.0", features = ["full"] } + +[build-dependencies] +prost-build = "0.14.3" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..a90c413 --- /dev/null +++ b/build.rs @@ -0,0 +1,65 @@ +use std::error::Error; +use std::fs; +use std::path::{Path, PathBuf}; +use std::str::FromStr; + +fn get_filenames(dir: &str) -> Result, std::io::Error> { + println!("cargo:rerun-if-changed=proto"); + let entries = fs::read_dir(Path::new(dir))?; + let filenames: Vec = entries + .filter_map(|entry| { + let path = entry.ok()?.path(); + if path.is_file() { + path.file_name()?.to_str().map(|s| s.to_owned()) + } else { + None + } + }) + .collect(); + Ok(filenames) +} + +fn main() -> Result<(), Box> { + let out_dir = "src/protobuf"; + if PathBuf::from_str(out_dir)?.exists() { + fs::remove_dir_all(out_dir).expect("清空输出目录出错"); + } + fs::create_dir_all(out_dir).expect("创建输出目录出错"); + + let proto_list = get_filenames("proto") + .expect("读取Protobuf定义文件列表失败") + .iter() + .filter_map(|file| { + if file.ends_with(".proto") { + Some(file.clone()) + } else { + None + } + }) + .collect::>(); + + prost_build::Config::new() + .out_dir(out_dir) + .compile_protos(&proto_list, &["proto/".to_string()])?; + + //tonic_prost_build::configure() + // .out_dir(out_dir) + // .compile_protos(&proto_list, &["proto/".to_string()])?; + + let mod_file = format!("{}/mod.rs", out_dir); + let mod_content = get_filenames(out_dir).expect("无法列出目录内容"); + let mod_content = mod_content + .iter() + .map(|file| format!("pub mod {};", file.trim_end_matches(".rs"))) + .collect::>() + .join("\n"); + fs::write(&mod_file, mod_content).expect("写出文件失败"); + + fs::write( + format!("{}/README.md", out_dir), + "# Warning!\n\n[protobuf](../protobuf) 中的文件由构建脚本生成,重新生成时将会**删除**此目录内的**全部文件**\ + ,请不要在此目录内工作,否则可能丢失工作进度!\n\n## 你被警告了!", + )?; + + Ok(()) +} diff --git a/proto/message.proto b/proto/message.proto new file mode 100644 index 0000000..821ab55 --- /dev/null +++ b/proto/message.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package gou; + + +enum MessageType { + MESSAGE_TYPE_TRACE = 0; + MESSAGE_TYPE_DEBUG = 1; + MESSAGE_TYPE_INFO = 2; + MESSAGE_TYPE_WARNING = 3; + MESSAGE_TYPE_ERROR = 4; +} + +message Starpoles { + MessageType type = 1; + string message = 2; +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index ba5954f..0ee01d0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,16 @@ +pub mod manager; +pub mod protobuf; + use actix_web::{App, HttpResponse, HttpServer, Responder, get, web}; +use chrono::Local; +use colored::{Color, Colorize}; +use fern::Dispatch; +use log::Level; #[tokio::main] async fn main() { - HttpServer::new(|| App::new().service(root)) + init_log(); + HttpServer::new(|| App::new().service(root).service(manager::ws_connect)) .bind(("0.0.0.0", 2018)) .unwrap() .run() @@ -10,6 +18,34 @@ async fn main() { .unwrap(); } +fn get_time() -> String { + let now = Local::now(); + now.format("%Y-%m-%d %H:%M:%S").to_string() +} + +fn init_log() { + let mut console_dispatch = Dispatch::new() + .format(|out, message, record| { + let (color, title) = match record.level() { + Level::Error => (Color::Red, "Error"), + Level::Warn => (Color::Yellow, "Warn"), + Level::Info => (Color::Green, "Info"), + Level::Debug => (Color::BrightWhite, "Debug"), + Level::Trace => (Color::White, "Trace"), + }; + + out.finish(format_args!( + "[{} {}]\t{}", + get_time(), + title.color(color), + message + )) + }) + .chain(std::io::stdout()) + .level(log::LevelFilter::Debug); + console_dispatch.apply().expect("写入日志失败"); +} + #[get("/")] async fn root() -> impl Responder { HttpResponse::Ok() diff --git a/src/manager.rs b/src/manager.rs new file mode 100644 index 0000000..683ca6c --- /dev/null +++ b/src/manager.rs @@ -0,0 +1,89 @@ +use crate::protobuf::gou::{MessageType, Starpoles}; +use actix::{Actor, ActorContext, StreamHandler}; +use actix_web::{HttpRequest, HttpResponse, get, web}; +use actix_web_actors::ws; +use actix_web_actors::ws::{Message, ProtocolError}; +use log::{debug, error, info, trace, warn}; +use prost::{DecodeError, Message as WebMessage}; + +pub struct WebSocketClient {} + +impl WebSocketClient { + pub fn new() -> Self { + Self {} + } +} + +impl Actor for WebSocketClient { + type Context = ws::WebsocketContext; +} + +impl StreamHandler> for WebSocketClient { + fn handle(&mut self, item: Result, ctx: &mut Self::Context) { + let item = match item { + Ok(item) => item, + Err(err) => { + error!("[Logger] 协议错误:{:?}", err); + ctx.close(None); + ctx.stop(); + return; + } + }; + + match item { + Message::Text(_) => { + debug!("[Logger] 不支持的消息类型"); + } + Message::Binary(binary) => { + let package = Starpoles::decode(binary); + let package = match package { + Ok(package) => package, + Err(err) => { + info!("[Logger] 远端数据包无法解析:{:?}", err); + return; + } + }; + let message_type = MessageType::try_from(package.r#type); + let message_type = if let Ok(message_type) = message_type { + message_type + } else { + warn!("[Logger] 无法解析消息类型:{}", package.r#type); + return; + }; + match message_type { + MessageType::Trace => { + trace!("{}", package.message); + } + MessageType::Debug => { + debug!("{}", package.message); + } + MessageType::Info => { + info!("{}", package.message); + } + MessageType::Warning => { + warn!("{}", package.message); + } + MessageType::Error => { + error!("{}", package.message); + } + } + } + Message::Continuation(_) => {} + Message::Ping(ping) => { + ctx.pong(&ping); + } + Message::Pong(_) => {} + Message::Close(_) => { + ctx.stop(); + } + Message::Nop => {} + } + } +} + +#[get("/connect")] +async fn ws_connect(req: HttpRequest, stream: web::Payload) -> HttpResponse { + let info = WebSocketClient::new(); + let resp = ws::start(info, &req, stream); + resp.unwrap_or_else(|e| e.error_response()) +} diff --git a/src/protobuf/README.md b/src/protobuf/README.md new file mode 100644 index 0000000..bc53781 --- /dev/null +++ b/src/protobuf/README.md @@ -0,0 +1,5 @@ +# Warning! + +[protobuf](../protobuf) 中的文件由构建脚本生成,重新生成时将会**删除**此目录内的**全部文件**,请不要在此目录内工作,否则可能丢失工作进度! + +## 你被警告了! \ No newline at end of file diff --git a/src/protobuf/gou.rs b/src/protobuf/gou.rs new file mode 100644 index 0000000..0e6b452 --- /dev/null +++ b/src/protobuf/gou.rs @@ -0,0 +1,43 @@ +// This file is @generated by prost-build. +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct Starpoles { + #[prost(enumeration = "MessageType", tag = "1")] + pub r#type: i32, + #[prost(string, tag = "2")] + pub message: ::prost::alloc::string::String, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum MessageType { + Trace = 0, + Debug = 1, + Info = 2, + Warning = 3, + Error = 4, +} +impl MessageType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::Trace => "MESSAGE_TYPE_TRACE", + Self::Debug => "MESSAGE_TYPE_DEBUG", + Self::Info => "MESSAGE_TYPE_INFO", + Self::Warning => "MESSAGE_TYPE_WARNING", + Self::Error => "MESSAGE_TYPE_ERROR", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "MESSAGE_TYPE_TRACE" => Some(Self::Trace), + "MESSAGE_TYPE_DEBUG" => Some(Self::Debug), + "MESSAGE_TYPE_INFO" => Some(Self::Info), + "MESSAGE_TYPE_WARNING" => Some(Self::Warning), + "MESSAGE_TYPE_ERROR" => Some(Self::Error), + _ => None, + } + } +} diff --git a/src/protobuf/mod.rs b/src/protobuf/mod.rs new file mode 100644 index 0000000..eb61ce2 --- /dev/null +++ b/src/protobuf/mod.rs @@ -0,0 +1 @@ +pub mod gou; \ No newline at end of file