From cf51dcf052af89f8742d887bde2c93d735309bdd Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sun, 13 Apr 2025 16:45:53 +0100 Subject: feat(lampada): wasm + websockets support --- lampada/src/connection/read.rs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'lampada/src/connection/read.rs') diff --git a/lampada/src/connection/read.rs b/lampada/src/connection/read.rs index 2c7eb58..4451d99 100644 --- a/lampada/src/connection/read.rs +++ b/lampada/src/connection/read.rs @@ -8,7 +8,7 @@ use std::{ }; use futures::{future::Fuse, FutureExt}; -use luz::{connection::Tls, jabber_stream::bound_stream::BoundJabberReader}; +use luz::jabber_stream::bound_stream::BoundJabberReader; use stanza::client::Stanza; use stanza::stream::Error as StreamErrorStanza; use stanza::stream_error::Error as StreamError; @@ -24,7 +24,7 @@ use super::{write::WriteHandle, SupervisorCommand, SupervisorSender}; /// read actor pub struct Read { - stream: BoundJabberReader, + stream: BoundJabberReader, disconnecting: bool, disconnect_timedout: Fuse>, @@ -51,7 +51,7 @@ pub struct ReadState { impl Read { fn new( - stream: BoundJabberReader, + stream: BoundJabberReader, tasks: JoinSet<()>, connected: Connected, logic: Lgc, @@ -129,7 +129,7 @@ impl Read { let stream_error = match e { peanuts::Error::ReadError(error) => None, peanuts::Error::Utf8Error(utf8_error) => Some(StreamError::UnsupportedEncoding), - peanuts::Error::ParseError(_) => Some(StreamError::BadFormat), + peanuts::Error::ParseError(_, _) => Some(StreamError::BadFormat), peanuts::Error::EntityProcessError(_) => Some(StreamError::RestrictedXml), peanuts::Error::InvalidCharRef(char_ref_error) => Some(StreamError::UnsupportedEncoding), peanuts::Error::DuplicateNameSpaceDeclaration(namespace_declaration) => Some(StreamError::NotWellFormed), @@ -140,6 +140,7 @@ impl Read { peanuts::Error::UndeclaredNamespace(_) => Some(StreamError::InvalidNamespace), peanuts::Error::Deserialize(deserialize_error) => Some(StreamError::InvalidXml), peanuts::Error::RootElementEnded => Some(StreamError::InvalidXml), + _ => None, }; let _ = self.on_crash.send((stream_error, ReadState { supervisor_control: self.supervisor_control, tasks: self.tasks })); @@ -169,7 +170,8 @@ pub enum ReadControl { pub struct ReadControlHandle { sender: mpsc::Sender, - pub(crate) handle: JoinHandle<()>, + // TODO: same here + // pub(crate) handle: JoinHandle<()>, } impl Deref for ReadControlHandle { @@ -188,7 +190,7 @@ impl DerefMut for ReadControlHandle { impl ReadControlHandle { pub fn new( - stream: BoundJabberReader, + stream: BoundJabberReader, connected: Connected, logic: Lgc, supervisor_control: SupervisorSender, @@ -205,16 +207,18 @@ impl ReadControlHandle { control_receiver, on_crash, ); - let handle = tokio::spawn(async move { actor.run().await }); + #[cfg(target_arch = "wasm32")] + wasm_bindgen_futures::spawn_local(async move { actor.run().await }); + #[cfg(not(target_arch = "wasm32"))] + tokio::spawn(async move { actor.run().await }); Self { sender: control_sender, - handle, } } pub fn reconnect( - stream: BoundJabberReader, + stream: BoundJabberReader, tasks: JoinSet<()>, connected: Connected, logic: Lgc, @@ -232,11 +236,13 @@ impl ReadControlHandle { control_receiver, on_crash, ); - let handle = tokio::spawn(async move { actor.run().await }); + #[cfg(target_arch = "wasm32")] + wasm_bindgen_futures::spawn_local(async move { actor.run().await }); + #[cfg(not(target_arch = "wasm32"))] + tokio::spawn(async move { actor.run().await }); Self { sender: control_sender, - handle, } } } -- cgit