hello:
I develop with EMA c++;
I request brokers with code such as "0874bk.HKd";
I get updateMsg through "cout << updateMsg << endl;"
But I get Illegible contents and Exception shown as follows:
So How can I deal with this problem ???
@luxiangyuan
value="ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ3440 2425ÍÍÍÍ98 4086"
You can see a similar value when calling fe.toString from the partial update message. See below sample codes to demonstrate the usage. Note that my sample just decodes only fid ROW80_4.
cout << "Name: " << fe.getName() << endl;cout << "fe.toString:" << fe.toString() << endl;rmtesBuffer.apply( fe.getRmtes() );cout << "after call rmtestBuffer.apply()"<<rmtesBuffer.toString() << endl;
Sample console output
Item Name: 0874bk.HKdService Name: ELEKTRON_DDName: ROW80_4fe.toString:FieldEntry fid="318" name="ROW80_4" dataType="Rmtes" value="ร5337รร1194 1193 -11s"after call rmtestBuffer.apply() 5337 1194 1193 -11s | 5469 6825 9025 6999
The junk characters you see in original value is just thedata encoded with RMTES partial update so when we call rmtestBuffer.apply() itwill return the actual string which apply the change from partial field update.
Please note that the RMTES example just shows the way tocatch RMTES data for one specific field which is BCAST_TEXT. If you want toapply the same approach to decode the HK page which contains multiple fields for Page rows, youhave to catch data for each row in the PAGE to your data structure such as Array of stringor array of RmtestBuffer class it depending on your design.
It looks like the screenshot you uploaded is corrupted so I can't see the error. What version of EMA you are using?
I did a quick test the RIC but there is no update for the RIC now. The field is RMTES and the update message may contain a partial page update which you might need to catch the field data for each row from the first refresh and then call RmtesBuffer.apply() to apply the buffer from the update message like the sample codes from 310__MarketPrice__Rmtes. Anyway, I would suggest you turn on XML Trace log to see actual data EMA receive.
hello @moragodkrit.chumsri_1
1、HKSE is closed, so you can not get 0874bk.HKd updateMsg;
2 、how can I turn on trace log in emaconfig.txt shown as appendix?
2、what is the different between "100__MarketPrice__Streaming" and “310_MarketPrice_Rmtes"? I develop my progrem refer to "100__MarketPrice__Streaming";
Hello @luxiangyuan
I find the concept of HK broker queue to be a bit complex, and it is usually necessary for a developer to understand how the queue is formed by the exchange, in order to parse it's meaning. Perhaps How to read the Hong Kong Broker Queue on My Refinitiv will be of help to better understand the content of HK broker queue.
To add a little to the answer by @moragodkrit.chumsri_1
Do you see:
<XmlTraceToStdout value="0"/>
Change tracing to 1, to be able to better understand what data is received by the consumer.
The broker queue is partitioned into rows. An update contains the updated content for a specific row(s).
The ROW80_X info is defined as RMTES type. RMTES example 310 shows how to process the update to RMTES field (BCAST_TEXT).
Same as in this example, one would store the initial content of ROW80_X and when an update to ROW80_X is received, apply the update content to the stored ROW80_X content, and store the current, resulting content of ROW80_X.
@luxiangyuanoutput.txt
I did test the issue this morning and not found the error. Please find attached console output (output.txt) generated by ESDK1.3 example. It just prints the refresh and updates message like your codes.The reason I asked you about the version you are using because there is a problem with RMTES in the old version of ESDK and development already add a built-in RMTES decoder to EMA internal decoder therefore if you are using the new version, you should get the same result as my test. I would suggest you test the issue with the latest version of ESDK to confirm the issue.
It seems to relate with this case which fixed in EMA 3.3.0. You can find the information from CHANGELOG file.
EMA C++ 3.3.0.L1 Issues Resolved -------------------------------- [ESDK-619] - RMTES Partial updates are not processed correctly if OmmRmtes.toString() is called before OmmRmtes.apply() is called [Case Number: 05533464, GitHub #74]
1、my sdk is 1.2.1
2、do you test refer to "100__MarketPrice__Streaming"?
3、I decode brokers updateMsg refer to "310__MarketPrice__Rmtes", there is no Exception, the updateMsg is shown as follows:
4、what is the ”effect“ of the code "rmtesBuffer.apply( fe.getRmtes() );"?
5、what is the difference between "100__MarketPrice__Streaming" and "rmtesBuffer.apply( fe.getRmtes() );"
6、it semms there are some redundance charaters in updateMsg of brokers, what is the use of these charaters?
The version you currently use has a bug in RMTES decoder, you should upgrade to the latest version of 1.3.1. The problem is reproducible with HK ric like your sample RIC.
@moragodkrit.chumsri_1
thanks for your replay.
if I use 1.3.1, I will not recv "redundance chars" such as follows???
hello @moragodkrit.chumsri_1:
I update ems sdk to 1.3.1
but I still can not get correct updateMsg.
some updateMsg seems ok,
but some updateMsg seems error, because I can note decode brokers form the msg.
the fun and result is shown as following:
thank you very much.
your answer works well;
rmtesBuffer must be used both on refreshMsg and updateMsg;
and one rmtesBuffer must be used for each ROW such as "ROW80_4";
thanks again.