aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/error.rs3
-rw-r--r--src/reader.rs24
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)
}
}