From 29c441eb8def13d42c8c534b4a89bdd5c2c96d17 Mon Sep 17 00:00:00 2001 From: Tony Giorgio Date: Sun, 19 Feb 2023 18:02:49 -0600 Subject: [PATCH] Log relay responses for 1s --- src/nostr.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/nostr.rs b/src/nostr.rs index 397129e..0db34f4 100644 --- a/src/nostr.rs +++ b/src/nostr.rs @@ -1,7 +1,9 @@ use crate::error::Error; use futures::pin_mut; +use futures::StreamExt; use nostr::prelude::*; use std::{time::Duration, vec}; +use worker::WebsocketEvent; use worker::{console_log, Cache, Delay, Fetch, Queue, Response, WebSocket}; pub(crate) const NOSTR_QUEUE: &str = "nostr-events-pub"; @@ -47,10 +49,12 @@ async fn send_event_to_relay(messages: Vec, relay: &str) -> Resul Ok(ws) => { // It's important that we call this before we send our first message, otherwise we will // not have any event listeners on the socket to receive the echoed message. - if let Some(e) = ws.events().err() { + let event_stream = ws.events(); + if let Some(e) = event_stream.as_ref().err() { console_log!("Error calling ws events from relay {relay}: {e:?}"); - return Err(e.into()); + return Err(Error::WorkerError(String::from("WS connection error"))); } + let mut event_stream = event_stream.unwrap(); if let Some(e) = ws.accept().err() { console_log!("Error accepting ws from relay {relay}: {e:?}"); @@ -63,6 +67,28 @@ async fn send_event_to_relay(messages: Vec, relay: &str) -> Resul } } + // log the first message we received from the relay + let sleep = delay(1_000); + let event_stream_fut = event_stream.next(); + pin_mut!(event_stream_fut); + pin_mut!(sleep); + match futures::future::select(event_stream_fut, sleep).await { + futures::future::Either::Left((event_stream_res, _)) => { + if let Some(event) = event_stream_res { + let event = event?; + + if let WebsocketEvent::Message(msg) = event { + if let Some(text) = msg.text() { + console_log!("websocket event from relay {relay}: {text}") + } + } + } + } + futures::future::Either::Right(_) => { + // Sleep triggered before we got a websocket response + } + } + if let Some(_e) = ws.close::(None, None).err() { console_log!("Error websocket to relay {relay}") }