diff options
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) } } |