diff options
author | 2025-04-13 15:01:14 +0100 | |
---|---|---|
committer | 2025-04-13 15:01:14 +0100 | |
commit | a0cc279551267dfa7a17fe4b449dd1a1fcd3526f (patch) | |
tree | e0d71a3d6f336e41ca8a290e6b49f5ade066383f | |
parent | c6b65630fd86668d4e81995757e32a691cdf9053 (diff) | |
download | peanuts-main.tar.gz peanuts-main.tar.bz2 peanuts-main.zip |
Diffstat (limited to '')
-rw-r--r-- | src/error.rs | 3 | ||||
-rw-r--r-- | src/reader.rs | 24 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/error.rs b/src/error.rs index 4976a78..d927bc1 100644 --- a/src/error.rs +++ b/src/error.rs @@ -47,6 +47,9 @@ pub enum DeserializeError { // TODO: add error context (usually the stanza) #[derive(Error, Debug, Clone)] pub enum Error { + #[cfg(target_arch = "wasm32")] + #[error("websocket closed")] + WebSocketClosed, #[error("io: {0}")] // TODO: is this okay? ReadError(Arc<std::io::Error>), diff --git a/src/reader.rs b/src/reader.rs index 62b4e08..751ee1d 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -133,21 +133,19 @@ impl WebSocketOnMessageRead { #[cfg(target_arch = "wasm32")] impl Readable for WebSocketOnMessageRead { async fn read_buf(&mut self, buffer: &mut Buffer) -> Result<usize> { - let mut queue = Vec::new(); - self.queue.recv_many(&mut queue, 10).await; - let mut bytes = 0; - for msg in queue { - match msg { - WsMessage::Text(s) => { - let text = s.as_bytes(); - bytes += buffer.write(text)?; - } - WsMessage::Binary(v) => { - bytes += buffer.write(&v)?; - } + debug!("reading buf"); + let msg = self.queue.recv().await; + let msg = match msg { + Some(msg) => msg, + None => return Err(Error::WebSocketClosed), + }; + match msg { + WsMessage::Text(s) => { + let text = s.as_bytes(); + Ok(buffer.write(text)?) } + WsMessage::Binary(v) => Ok(buffer.write(&v)?), } - Ok(bytes) } } |