1
0
mirror of https://github.com/pcvolkmer/arsnova-client.git synced 2025-07-01 22:42:55 +00:00

refactor: use tungstenite Utf8Bytes

This commit is contained in:
2025-02-14 21:50:23 +01:00
parent d6ecf2963b
commit ee7de57962

View File

@ -1,7 +1,7 @@
/* /*
* This file is part of arsnova-client * This file is part of arsnova-client
* *
* Copyright (C) 2023 Paul-Christian Volkmer * Copyright (C) 2025 Paul-Christian Volkmer
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by * it under the terms of the GNU Lesser General Public License as published by
@ -31,8 +31,9 @@ use serde_json::json;
use tokio::select; use tokio::select;
use tokio::sync::mpsc::{Receiver, Sender}; use tokio::sync::mpsc::{Receiver, Sender};
use tokio_tungstenite::connect_async; use tokio_tungstenite::connect_async;
use tokio_tungstenite::tungstenite::client::IntoClientRequest;
use tokio_tungstenite::tungstenite::Message; use tokio_tungstenite::tungstenite::Message;
use url::Url; use tokio_tungstenite::tungstenite::protocol::frame::Utf8Bytes;
use crate::client::ClientError::{ use crate::client::ClientError::{
ConnectionError, LoginError, ParserError, RoomNotFoundError, UrlError, ConnectionError, LoginError, ParserError, RoomNotFoundError, UrlError,
@ -547,7 +548,7 @@ impl Client<LoggedIn> {
let room_info = self.get_room_info(short_id).await?; let room_info = self.get_room_info(short_id).await?;
let ws_url = self.api_url.replace("http", "ws"); let ws_url = self.api_url.replace("http", "ws");
let (socket, _) = connect_async(Url::parse(&format!("{}/ws/websocket", ws_url)).unwrap()) let (socket, _) = connect_async(format!("{}/ws/websocket", ws_url).into_client_request().unwrap())
.await .await
.map_err(|_| ConnectionError)?; .map_err(|_| ConnectionError)?;
@ -557,14 +558,14 @@ impl Client<LoggedIn> {
if write if write
.send(Message::Text( .send(Message::Text(
WsConnectMessage::new(self.token.as_ref().unwrap()).to_string(), Utf8Bytes::from(WsConnectMessage::new(self.token.as_ref().unwrap()).to_string()),
)) ))
.await .await
.is_ok() .is_ok()
{ {
return match write return match write
.send(Message::Text( .send(Message::Text(
WsSubscribeFeedbackMessage::new(&room_info.id).to_string(), Utf8Bytes::from(WsSubscribeFeedbackMessage::new(&room_info.id).to_string()),
)) ))
.await .await
{ {
@ -573,10 +574,10 @@ impl Client<LoggedIn> {
Some(value) = receiver.recv() => Some(value) = receiver.recv() =>
{ {
let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value.to_owned()).to_string(); let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value.to_owned()).to_string();
let _ = write.send(Message::Text(msg)).await; let _ = write.send(Message::Text(Utf8Bytes::from(msg))).await;
}, },
_ = tokio::time::sleep(Duration::from_secs(15)) => { _ = tokio::time::sleep(Duration::from_secs(15)) => {
let _ = write.send(Message::Text("\n".to_string())).await; let _ = write.send(Message::Text(Utf8Bytes::from("\n".to_string()))).await;
} }
) )
}, },
@ -601,7 +602,7 @@ impl Client<LoggedIn> {
let room_info = self.get_room_info(short_id).await?; let room_info = self.get_room_info(short_id).await?;
let ws_url = self.api_url.replace("http", "ws"); let ws_url = self.api_url.replace("http", "ws");
let (socket, _) = connect_async(Url::parse(&format!("{}/ws/websocket", ws_url)).unwrap()) let (socket, _) = connect_async(format!("{}/ws/websocket", ws_url).as_str().into_client_request().unwrap())
.await .await
.map_err(|_| ConnectionError)?; .map_err(|_| ConnectionError)?;
@ -609,14 +610,14 @@ impl Client<LoggedIn> {
if write if write
.send(Message::Text( .send(Message::Text(
WsConnectMessage::new(self.token.as_ref().unwrap()).to_string(), Utf8Bytes::from(WsConnectMessage::new(self.token.as_ref().unwrap()).to_string()),
)) ))
.await .await
.is_ok() .is_ok()
{ {
match write match write
.send(Message::Text( .send(Message::Text(
WsSubscribeFeedbackMessage::new(&room_info.id).to_string(), Utf8Bytes::from(WsSubscribeFeedbackMessage::new(&room_info.id).to_string()),
)) ))
.await .await
{ {
@ -630,7 +631,7 @@ impl Client<LoggedIn> {
} }
} }
_ = tokio::time::sleep(Duration::from_secs(15)) => { _ = tokio::time::sleep(Duration::from_secs(15)) => {
let _ = write.send(Message::Text("\n".to_string())).await; let _ = write.send(Message::Text(Utf8Bytes::from("\n".to_string()))).await;
} }
} }
}, },
@ -643,7 +644,7 @@ impl Client<LoggedIn> {
} }
} }
_ = tokio::time::sleep(Duration::from_secs(15)) => { _ = tokio::time::sleep(Duration::from_secs(15)) => {
let _ = write.send(Message::Text("\n".to_string())).await; let _ = write.send(Message::Text(Utf8Bytes::from("\n".to_string()))).await;
} }
} }
}, },
@ -658,10 +659,10 @@ impl Client<LoggedIn> {
Some(value) = rx.recv() => { Some(value) = rx.recv() => {
let user_id = self.get_user_id().unwrap_or_default(); let user_id = self.get_user_id().unwrap_or_default();
let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value.to_owned()).to_string(); let msg = WsCreateFeedbackMessage::new(&room_info.id, &user_id, value.to_owned()).to_string();
let _ = write.send(Message::Text(msg)).await; let _ = write.send(Message::Text(Utf8Bytes::from(msg))).await;
} }
_ = tokio::time::sleep(Duration::from_secs(15)) => { _ = tokio::time::sleep(Duration::from_secs(15)) => {
let _ = write.send(Message::Text("\n".to_string())).await; let _ = write.send(Message::Text(Utf8Bytes::from("\n".to_string()))).await;
} }
} }
}, },
@ -674,7 +675,7 @@ impl Client<LoggedIn> {
} }
async fn handle_incoming_feedback_with_fn(&self, msg: &Message, f: &fn(&Feedback)) { async fn handle_incoming_feedback_with_fn(&self, msg: &Message, f: &fn(&Feedback)) {
if msg.is_text() && msg.clone().into_text().unwrap().starts_with("MESSAGE") { if msg.is_text() && msg.clone().into_text().unwrap().to_string().starts_with("MESSAGE") {
if let Ok(msg) = WsFeedbackMessage::parse(msg.to_text().unwrap()) { if let Ok(msg) = WsFeedbackMessage::parse(msg.to_text().unwrap()) {
if msg.body.body_type == "FeedbackChanged" { if msg.body.body_type == "FeedbackChanged" {
let feedback = msg.body.payload.get_feedback(); let feedback = msg.body.payload.get_feedback();
@ -685,7 +686,7 @@ impl Client<LoggedIn> {
} }
async fn handle_incoming_feedback_with_sender(&self, msg: &Message, tx: &Sender<Feedback>) { async fn handle_incoming_feedback_with_sender(&self, msg: &Message, tx: &Sender<Feedback>) {
if msg.is_text() && msg.clone().into_text().unwrap().starts_with("MESSAGE") { if msg.is_text() && msg.clone().into_text().unwrap().to_string().starts_with("MESSAGE") {
if let Ok(msg) = WsFeedbackMessage::parse(msg.to_text().unwrap()) { if let Ok(msg) = WsFeedbackMessage::parse(msg.to_text().unwrap()) {
if msg.body.body_type == "FeedbackChanged" { if msg.body.body_type == "FeedbackChanged" {
let feedback = msg.body.payload.get_feedback(); let feedback = msg.body.payload.get_feedback();