[Interest] QCborValue is not suitable for using in sockets data exchange?
Thiago Macieira
thiago.macieira at intel.com
Thu May 19 22:00:42 CEST 2022
On Thursday, 19 May 2022 09:41:03 PDT Alexander Dyagilev wrote:
> Hello,
>
> One can easily write it to socket. E.g.
>
> socket->write(value.toCbor());
>
> But how to read it then? It seems it's not possible.
I have yet to properly implement continued parsing with QCborValue.
QCborStreamReader supports it, though.
> I.e. the following solution:
>
> MyClient::MyClient()
> {
> QCborStreamReader cborReader = new QCborStreamReader(socket);
> }
This code doesn't compile. You probably don't want to use new anyway.
> MyClient::onReadyRead()
> {
> QCborValue::fromCbor(cborReader);
> }
>
> Seems to be wrong. I.e. there can situation that data for the current
> item is not completely received yet. What happens then? It seems thing
> will stop working, because QCborValue::fromCbor can't resume from the
> point it stopped due to EndOfFile.
The problem here is that you are not confirming that the socket has received a
single full CBOR element so QCborValue can parse it. QCborStreamReader can
resume an incomplete parsing (call reparse() on it), but QCborValue cannot.
Any sub-elements that have been consumed will be lost if you try.
> Am I right? And one just has to use plain
> QCborStreamReader/QCborStreamWriter.
For the moment.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Cloud Software Architect - Intel DCAI Cloud Engineering
More information about the Interest
mailing list