From 11cb5101a8b5dc724d455990924d07f76a6f30bb Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Fri, 22 Dec 2023 19:32:44 +0100 Subject: [PATCH] fix: keep websocket connection alive by sending empty message as ping --- src/client.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/client.rs b/src/client.rs index 1fe2da7..f81429a 100644 --- a/src/client.rs +++ b/src/client.rs @@ -28,8 +28,8 @@ use futures_util::{SinkExt, StreamExt}; use reqwest::{IntoUrl, StatusCode}; use serde::Deserialize; use serde_json::json; -use tokio::join; use tokio::sync::mpsc::{Receiver, Sender}; +use tokio::{join, select}; use tokio_tungstenite::connect_async; use tokio_tungstenite::tungstenite::Message; use url::Url; @@ -212,6 +212,7 @@ pub enum FeedbackHandler { } /// A possible feedback value +#[derive(Clone)] pub enum FeedbackValue { VeryGood, A, @@ -456,11 +457,16 @@ impl Client { .await { Ok(_) => loop { - if let Some(value) = receiver.recv().await { - let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value) - .to_string(); - let _ = write.send(Message::Text(msg)).await; - }; + select!( + Some(value) = receiver.recv() => + { + let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value.to_owned()).to_string(); + let _ = write.send(Message::Text(msg)).await; + }, + _ = tokio::time::sleep(Duration::from_secs(15)) => { + let _ = write.send(Message::Text("\n".to_string())).await; + } + ) }, Err(_) => Err(ConnectionError), };