Skip to content

Failed to emit plain text #219

Closed
Closed
@SSebo

Description

@SSebo

Javascript socket.io client can emit plain text. rust_socketio currently is not capable of.

client.emit('message-received', data); // javascript

For example on will received a payload. can not just emit that payload back when it is plain text.
currently should use json!() macro to encode.

let socket = ClientBuilder::new("http://localhost:4200")
       .namespace("/admin")
       .on("message-received", |p, socket| {
            let s = match &p {
                Payload::String(s) => s,
                _ => "",
            };
            println!("message-received {:?}", s);
            let _ = socket.emit("utf-8™", p); // will failed
        })
       .connect()

because of this function

pub(crate) fn build_packet_for_payload<'a>(
&'a self,
payload: Payload,
event: Event,
nsp: &'a str,
id: Option<i32>,
) -> Result<Packet> {
match payload {
Payload::Binary(bin_data) => Ok(Packet::new(
if id.is_some() {
PacketId::BinaryAck
} else {
PacketId::BinaryEvent
},
nsp.to_owned(),
Some(serde_json::Value::String(event.into()).to_string()),
id,
1,
Some(vec![bin_data]),
)),
Payload::String(str_data) => {
serde_json::from_str::<serde_json::Value>(&str_data)?;
let payload = format!("[\"{}\",{}]", String::from(event), str_data);
Ok(Packet::new(
PacketId::Event,
nsp.to_owned(),
Some(payload),
id,
0,
None,
))
}
}

this line

serde_json::from_str::<serde_json::Value>(&str_data)?;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions