From 643470ee50aa20768f0e33f24dfb1626aeabbfe2 Mon Sep 17 00:00:00 2001 From: Rain Date: Thu, 1 Feb 2024 09:42:42 -0500 Subject: [PATCH 1/2] handle_event sends a vector of messages to callback --- socketio/src/asynchronous/client/client.rs | 15 ++++++++++++--- socketio/src/client/raw_client.rs | 19 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/socketio/src/asynchronous/client/client.rs b/socketio/src/asynchronous/client/client.rs index dc72bcaa..8a315982 100644 --- a/socketio/src/asynchronous/client/client.rs +++ b/socketio/src/asynchronous/client/client.rs @@ -340,17 +340,26 @@ impl Client { _ => Event::Message, }; - (event, contents.get(1).ok_or(Error::IncompletePacket())?) + let msg = if let Some((_, payload)) = contents.split_first() { + payload.to_vec() + } else { + return Err(Error::IncompletePacket()); + }; + + (event, msg) } else { // case 2 ( Event::Message, - contents.first().ok_or(Error::IncompletePacket())?, + vec![contents + .first() + .ok_or(Error::IncompletePacket())? + .to_owned()], ) }; // call the correct callback - self.callback(&event, data.to_string()).await?; + self.callback(&event, data).await?; } Ok(()) diff --git a/socketio/src/client/raw_client.rs b/socketio/src/client/raw_client.rs index b8299139..ae1a6e8e 100644 --- a/socketio/src/client/raw_client.rs +++ b/socketio/src/client/raw_client.rs @@ -327,7 +327,7 @@ impl RawClient { }; // a socketio message always comes in one of the following two flavors (both JSON): - // 1: `["event", "msg"]` + // 1: `["event", "msg", ...]` // 2: `["msg"]` // in case 2, the message is ment for the default message event, in case 1 the event // is specified @@ -339,17 +339,28 @@ impl RawClient { _ => Event::Message, }; - (event, contents.get(1).ok_or(Error::IncompletePacket())?) + let msg = if let Some((_, payload)) = contents.split_first() { + payload.to_vec() + } else { + return Err(Error::IncompletePacket()); + }; + + (event, msg) } else { // case 2 + // FIXME: `["msg", "msg", ...]` could technically happen I believe? + // Case 2 could still possibly return less data than desired ( Event::Message, - contents.first().ok_or(Error::IncompletePacket())?, + vec![contents + .first() + .ok_or(Error::IncompletePacket())? + .to_owned()], ) }; // call the correct callback - self.callback(&event, data.to_string())?; + self.callback(&event, data)?; } Ok(()) From ca2817a6296f03c29654bde32d2e988dabe63c49 Mon Sep 17 00:00:00 2001 From: Rain Date: Thu, 1 Feb 2024 09:44:20 -0500 Subject: [PATCH 2/2] Fix comments in async handle_event --- socketio/src/asynchronous/client/client.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/socketio/src/asynchronous/client/client.rs b/socketio/src/asynchronous/client/client.rs index 8a315982..86ef7e2a 100644 --- a/socketio/src/asynchronous/client/client.rs +++ b/socketio/src/asynchronous/client/client.rs @@ -328,7 +328,7 @@ impl Client { }; // a socketio message always comes in one of the following two flavors (both JSON): - // 1: `["event", "msg"]` + // 1: `["event", "msg", ...]` // 2: `["msg"]` // in case 2, the message is ment for the default message event, in case 1 the event // is specified @@ -349,6 +349,8 @@ impl Client { (event, msg) } else { // case 2 + // FIXME: `["msg", "msg", ...]` could technically happen I believe? + // Case 2 could still possibly return less data than desired ( Event::Message, vec![contents