summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2022-10-31 17:03:10 +0800
committerluwenpeng <[email protected]>2022-11-03 14:30:58 +0800
commit9db73f57c452aa05da55211fd30af568a57857fc (patch)
tree237c6b2adaad64da7733638c7fd2ab0c9d88b7f2 /src/main.rs
parent54d9885220d2e0cd0167f6cbb10c7b0d9e762df2 (diff)
[delete] example/echo.rsHEADlwp-self-study
[update] src/lib.rs -- 增加调试日志 [update] src/main.rs -- 增加调试日志 [update] src/tcp.rs i -- 增加调试日志 [update] src/reactor.rs -- 增加调试日志 [update] src/executor.rs -- 增加调试日志
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..ad85a80
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,51 @@
+// luwenpeng 2022/11/01
+
+use futures::StreamExt;
+use mini_rust_runtime::executor::Executor;
+use mini_rust_runtime::tcp::TcpListener;
+use tokio::io::AsyncReadExt;
+use tokio::io::AsyncWriteExt;
+
+fn main() {
+ let excutor = Executor::new();
+
+ excutor.block_on(tcp_server);
+}
+
+async fn tcp_server() {
+ let mut listener = TcpListener::bind("127.0.0.1:30000").unwrap();
+ println!("[tcp_server] listen on: 127.0.0.1:30000");
+
+ // NOTE:listener.next() 其实是调用的 poll_next()
+ while let Some(ret) = listener.next().await {
+ if let Ok((mut stream, addr)) = ret {
+ println!("[tcp_server] accept new connection: {}", addr);
+
+ // 此处只是注册,并不是此时执行
+ let future = async move {
+ let mut buf = [0; 4096];
+ loop {
+ match stream.read(&mut buf).await {
+ Ok(n) => {
+ println!("[tcp_server] stream {} read: {}", addr, n);
+
+ if n == 0 || stream.write_all(&buf[..n]).await.is_err() {
+ println!("[tcp_server] stream {} write: {}", addr, n);
+ return;
+ }
+ }
+ Err(e) => {
+ println!("[tcp_server] stream {} read: {}", addr, e);
+ return;
+ }
+ }
+ }
+ };
+
+ // 将 future 封装成 task push 到任务队列中
+ println!("[tcp_server] -> befor Executor::spawn()");
+ Executor::spawn(future);
+ println!("[tcp_server] -> after Executor::spawn()");
+ }
+ }
+}