upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/http/websocket.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-11-20 21:36:09 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2025-11-20 21:36:09 +0000
commit89c69eae8e75d2b00794087d9ef74fd4856d0f88 (patch)
tree2a1055d98c6de7ec0b83e857817569b2203aa0e9 /src/http/websocket.rs
parent62bcfda39d51a459fbf0a7fa48ee9e2ac8505780 (diff)
replace actix with hyper
Diffstat (limited to 'src/http/websocket.rs')
-rw-r--r--src/http/websocket.rs73
1 files changed, 0 insertions, 73 deletions
diff --git a/src/http/websocket.rs b/src/http/websocket.rs
deleted file mode 100644
index 0171013..0000000
--- a/src/http/websocket.rs
+++ /dev/null
@@ -1,73 +0,0 @@
1/// WebSocket Handler
2///
3/// Handles WebSocket upgrade requests and passes connections to the Nostr relay.
4use actix_web::{web, Error, HttpRequest, HttpResponse, Result};
5use actix_ws::Message;
6use futures_util::StreamExt;
7use nostr_relay_builder::LocalRelay;
8
9/// Handle WebSocket upgrade and relay connection
10pub async fn handle(
11 req: HttpRequest,
12 stream: web::Payload,
13 relay: web::Data<LocalRelay>,
14) -> Result<HttpResponse, Error> {
15 let (response, mut session, mut msg_stream) = actix_ws::handle(&req, stream)?;
16
17 let peer_addr = req
18 .peer_addr()
19 .unwrap_or_else(|| "0.0.0.0:0".parse().unwrap());
20
21 tracing::debug!("WebSocket connection from {}", peer_addr);
22
23 // Spawn task to handle the WebSocket connection
24 // TODO: Will use relay.take_connection() for full Nostr relay integration
25 let _relay = relay.get_ref().clone();
26 actix_web::rt::spawn(async move {
27 // Create a channel to communicate between actix-ws and relay
28 let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel();
29
30 // Spawn task to send messages from relay to client
31 let mut session_clone = session.clone();
32 actix_web::rt::spawn(async move {
33 while let Some(msg) = rx.recv().await {
34 if session_clone.text(msg).await.is_err() {
35 break;
36 }
37 }
38 });
39
40 // Handle incoming messages from client
41 while let Some(Ok(msg)) = msg_stream.next().await {
42 match msg {
43 Message::Text(text) => {
44 // For now, just echo back - will integrate with relay in next phase
45 tracing::debug!("Received text message: {}", text);
46 if let Err(e) = tx.send(text.to_string()) {
47 tracing::error!("Failed to send message: {}", e);
48 break;
49 }
50 }
51 Message::Binary(_) => {
52 tracing::warn!("Received unexpected binary message");
53 }
54 Message::Close(_) => {
55 tracing::debug!("Client closed connection");
56 break;
57 }
58 Message::Ping(bytes) => {
59 if session.pong(&bytes).await.is_err() {
60 break;
61 }
62 }
63 Message::Pong(_) => {}
64 Message::Continuation(_) => {}
65 Message::Nop => {}
66 }
67 }
68
69 tracing::debug!("WebSocket connection closed for {}", peer_addr);
70 });
71
72 Ok(response)
73}