summaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/main.rs')
-rw-r--r--server/src/main.rs55
1 files changed, 19 insertions, 36 deletions
diff --git a/server/src/main.rs b/server/src/main.rs
index a0fa7d6..d879ae6 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -1,42 +1,26 @@
+use futures_util::{SinkExt, StreamExt};
use std::net::SocketAddr;
-use tokio::io::{AsyncReadExt, AsyncWriteExt};
-use std::io::Write;
+use tokio::io::AsyncWriteExt;
+use tungstenite::protocol::Message;
-async fn handle_request(_request: &[u8]) -> (Vec<u8>, &'static str) {
-// if let Some(rest) = request.strip_prefix(b"GET /") {
-// } else if let Some(rest) = request.strip_prefix(b"POST /") {
-// } else {
- (b"Bad request".to_vec(), "400 Bad Request")
-// }
-}
-
-async fn handle_connection(conn: &mut tokio::net::TcpStream) -> Result<(), String> {
- let mut request = vec![0; 60];
- let mut request_len = 0;
- loop {
- let n = conn.read(&mut request[request_len..]).await.map_err(|e| format!("read error: {e}"))?;
- if n == 0 {
- return Err(format!("unexpected EOF"));
- }
- match request[request_len..request_len + n].windows(2).position(|w| w == b"\r\n") {
- Some(end) => {
- request_len += end;
- break;
- }
- None => {
- request_len += n;
- if request_len == request.len() {
- break;
- }
- }
+async fn handle_connection(conn: &mut tokio::net::TcpStream) -> anyhow::Result<()> {
+ let mut ws = tokio_tungstenite::accept_async_with_config(
+ conn,
+ Some(tungstenite::protocol::WebSocketConfig {
+ max_message_size: Some(4096),
+ max_frame_size: Some(4096),
+ ..Default::default()
+ }),
+ )
+ .await?;
+ while let Some(message) = ws.next().await {
+ let message = message?;
+ if matches!(message, Message::Close(_)) {
+ break;
}
+ println!("{:?}", message);
+ ws.send(message).await?;
}
- let (response_content, status) = handle_request(&request[..request_len]).await;
- let mut response = vec![];
- let _ = write!(response, "HTTP/1.1 {status}\r\nContent-Type: text/plain\r\nContent-Length: {}\r\n\r\n",
- response_content.len());
- response.extend_from_slice(&response_content);
- let _ = conn.write_all(&response).await.map_err(|e| format!("write error: {e}"))?;
Ok(())
}
@@ -70,7 +54,6 @@ async fn main() {
Ok(()) => {}
Err(e) => {
eprintln!("Error handling connection to {addr}: {e}");
-
}
}
let _ = stream.shutdown().await;