For distinguishing the type, I would recommend wrapping your messages in
a common union type, e.g:
struct Message {
union {
login @0 :Login;
commandGetData @1 :CommandGetData;
# etc.
}
}
The rpc protocol itself does something similar on the wire; see
rpc.capnp.
For determining message size, you shouldn't need to do any extra
framing, as capnp's stream serialization already makes it possible to
determine the size of a message:
https://capnproto.org/encoding.html#serialization-over-a-stream
I'm not familiar enough with the rust & node APIs to provide code
examples, but hopefully this is helpful.
-Ian
Quoting Alex Syrnikov (2022-10-25 22:45:02)
> Hello.
>
> I have (working on) Rust service and clients ( Rust and Node.js). I
> want service<->client cap'n'proto message exchange via Tcp socket (no
> HTTP). Messages will go via tcp connection, but I have different
> message types (each message is structs Login, or CommandGetData or
> Error...). So how can I distinguish which message Type I got from tcp
> bytes stream (and I need to know it's size too).
>
> I decided to prefix each message with UInt32 type and size (8 bytes
> total). Probably JS can read raw bytes. Or I can prefix Messages with
> fixed size unpacked message (struct - 24 bytes).
>
> struct MessageHeader {
> type @0: UInt32;
> size @1: UInt32;
> }
>
> So what is good solution for this task? I think it was already solved
> many times. I understand, that RPC will solve this as JSON messages.
> But I do not want use RPC right now.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Cap'n Proto" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [1][email protected].
> To view this discussion on the web visit
> [2]https://groups.google.com/d/msgid/capnproto/7b42273c-8e4b-4a70-b661-
> d6dd7b014367n%40googlegroups.com.
>
> Verweise
>
> 1. mailto:[email protected]
> 2.
> https://groups.google.com/d/msgid/capnproto/7b42273c-8e4b-4a70-b661-d6dd7b014367n%40googlegroups.com?utm_medium=email&utm_source=footer
--
You received this message because you are subscribed to the Google Groups
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/capnproto/166675437265.7667.17809492647859751720%40box.