message-io icon indicating copy to clipboard operation
message-io copied to clipboard

ws can not receive text

Open reison1218 opened this issue 2 years ago • 10 comments

hi,thanks for your work! i love this crate,it help me lot! i find the ws server side can not receive text?i have check the source code. because the trait Remote's function "fn receive(&self,process_data: impl FnMut(&[u8])) -> ReadStatus". u can check it on adapter.rs i change the ws.rs, add some code for receive funciton.like this: Message::Text(text) => { drop(state); process_data(text.as_bytes()) } but this is bad way. i know if change the trait Remote will make many change do u have any good idea for ws support text?

reison1218 avatar Jun 08 '23 15:06 reison1218

Hi @reison1218 , I'm glad you like it!

Because we need a "common" interface for all adapters, WS works in binary mode. Nevertheless, once https://github.com/lemunozm/message-io/issues/54 was merged (thanks to @kgraefe), I think this capability for WS can be allowed through configuration. Something like:

let conn = handler.network().connect_with(TransportConnect::Ws(WsMode::Text), addr)?;

The interface of the adapter will be the same, but the &[u8] parameters can now be interpreted internally as text, and internally the Ws adapter will send/receive the data as text.

lemunozm avatar Jun 08 '23 15:06 lemunozm

thanks for your reply. i have check the #54 so,if merge it. we can code like this?

handler.network().listen(Transport::Ws(WsMode::Message), "0.0.0.0:3044").unwrap();

why the WsMode is Message?because user can process Text and Binary both.not just one of them.

does it possible?

reison1218 avatar Jun 08 '23 15:06 reison1218

Respecting the current interface, you need to choose between one of them when creating the connection, because send()/recv() methods only knows about the buffer. You do not have enough information to know how to interpret what that buffer has

lemunozm avatar Jun 08 '23 16:06 lemunozm

thanks for answer : )

reison1218 avatar Jun 09 '23 04:06 reison1218

Given another thought on this, maybe we could have another send_with() and recv_with() that allows to pass specific transport properties, following the structure found un #54 i.e:

send_with(data, TransportProp::Ws(WsMode::Text))

lemunozm avatar Jun 10 '23 09:06 lemunozm

Is there currently a way to receive and send text-messages or is it still work in progress?

hschneider avatar Feb 18 '24 09:02 hschneider

There is no way to send text messages right now. I'm still open to review a PR with the required changes or discussing an idea. But I'm no longer adding new features in message-io, at least by now.

lemunozm avatar Feb 19 '24 07:02 lemunozm

OK - thanks for the info.

So converting bin to text and vice versa should do as a temp. workaround. This is something every end-user should be able to do.

hschneider avatar Feb 19 '24 08:02 hschneider

If the server can interpret the binary message correctly, then that can be a workaround, yes

lemunozm avatar Feb 19 '24 08:02 lemunozm

It sends and receives unicode perfectly. So I see no problem even not at the server's side. Assumed, the server does not await plain text messages :-/

hschneider avatar Feb 19 '24 09:02 hschneider