question

Upvote
Accepted
93 3 1 7

Encoding fragmented genericMsg

When I start encoding a RefreshMsg I dont know whether the message will be fragmented
so I cannot call refreshMsg.applyRefreshComplete() when encoding the header.

If on completing the message encoding I know that this is the last message fragment so I can call
encodeIterator.setRefreshComplete().

But I have a similar issue with genericMsg.
I cant call GenericMsg.applyMessageComplete() because I dont know whether this will be the last fragment.
But EncodeIterator does not have a setMessageComplete() method.

So How can I set messageComplete on a generic msg?

elektronrefinitiv-realtimeelektron-sdkrrtjavaeta-apielektron-transport-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
Accepted
14.3k 23 8 12

@kim.valentine

Beside the GenericMsg.applyMessageComplete(), the application can also set message complete on the generic message via the following statement

GenericMsg.flags(GenericMsgFlags.MESSAGE_COMPLETE);
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Setting the GenericMsg.flags only has an effect before calling GenericMsg.encodeInit(EncodeIterator,size). But at that point I do not know whether this will be the last fragment of a generic message. I only know that after I finish the encoding and can check that the payload has been completely encoded. If I am encoding a refresh message I can calI EncodeIterator.setRefreshComplete() which will set the refresh complete flag for an already encoded message. What I need is a similar method for generic messages, I suggest EncodeIterator.setMessageComplete().

@kim.valentine

I have create the service cloud case 04967973 for process your enhancement request.

So as not to mis-lead others, this is NOT the correct answer.

GenericMsg.flags(GenericMsgFlags.MESSAGE_COMPLETE);

needs to be set BEFORE encoding starts for it to take effect.

What is required is a method that will set the flag on the encoded buffer AFTER encoding is complete.

This is available for Refresh msgs but not for Generic msgs.

So the correct answer is that it is not possible until the missing function/method is provided by TR.

Upvotes
14.3k 23 8 12

@kim.valentine

Could you please clarify my understanding about your question? You would like to know how to set the Generic Message complete flag on the last fragment?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
67 3 1 8

I too have run into this issue but with C++ UPA API.

RSSL_API RsslRet rsslSetRefreshCompleteFlag (RsslEncodeIterator *pIter)

is available to set the RSSL_RFMF_REFRESH_COMPLETE flag on an encoded RsslRefreshMsg buffer but there is no equivalent to set the RSSL_GNMF_MESSAGE_COMPLETE flag on an encoded RsslGenericMsg Buffer.

I am using UPA 7.6.1L1( I have checked 8.0.0L1 and it is not available in that version either).

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@Gordon Hunn

I have created the case: 04974333 for tracking your request on UPA C.

Hi @Gordon Hunn

This feature has been added to ETA C 3.1.0 as well. You can download it from Elektron SDK - C/C++ 1.1.0 at this link.

Upvotes
582 8 13 23

Hi @kim.valentine,

The EncodeIterator also has a method 'setRefreshCompleteFlag()' to indicate Refresh Complete.

Is this what you're looking for?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

No,

setRefreshComplete is for Refresh messages only.

I need a similar method for Generic messages.

Upvotes
14.3k 23 8 12

Hi @kim.valentine

This feature has been added to ETA Java 3.1.0. You can download it from Elektron SDK - Java 1.1.0 at this link.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.