Upgrading to ContributionChannel : PostMsg has not have container type of RSSL_DT_MSG

andrewjharvey
andrewjharvey Newcomer
edited May 6 in RFA

We have an older API we use for pushing prices to Reuters using the old MarketLink infrastructure and are moving to the ContributionChannel infrastructure. We use the rfanet8.2.1.L2 library

When testing the new infrastructure we are getting the error

PostMsg has not have container type of RSSL_DT_MSG

Using the trace logging our container type is RSSL_DT_FIELD_LIST

<postMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="1" containerType="RSSL_DT_FIELD_LIST" flags="0x166 (RSSL_PSMF_HAS_POST_ID|RSSL_PSMF_HAS_MSG_KEY|RSSL_PSMF_POST_COMPLETE|RSSL_PSMF_ACK|RSSL_PSMF_HAS_PART_NUM)" postId="3" partNum="0" postUserId="40676" postUserAddr="10.141.152.100" dataSize="8">
<key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="9" name="TEST01=CIBL" nameType="1"/>
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="22" data="0C64"/>
</fieldList>
</dataBody>
</postMsg>

This is the psuedo code we're using to generate the POST message. It's a test with hard coded values. We've also tried creating the FieldList with a FieldListWriteIterator. Which seems to produces the same results.

        AttribInfo attribInfo = new AttribInfo();
attribInfo.NameType = RDM.INSTRUMENT_NAME_TYPES.INSTRUMENT_NAME_RIC;
attribInfo.Name = new RFA_String("TEST01=CIBL");
attribInfo.ServiceName = new RFA_String(_reutersService.ServiceName);

PostMsg postMessage = new PostMsg();
postMessage.IndicationMask = PostMsg.IndicationMaskFlag.MessageInit |
PostMsg.IndicationMaskFlag.MessageComplete;
if (requestAck)
{
postMessage.IndicationMask = (byte)(postMessage.IndicationMask | PostMsg.IndicationMaskFlag.WantAck);
}

postMessage.PostID = _postId;
postMessage.AttribInfo = attribInfo;
postMessage.MsgModelType = RDM.MESSAGE_MODEL_TYPES.MMT_MARKET_PRICE;

;

SingleWriteIterator swIt = new SingleWriteIterator();
FieldList fieldList = new FieldList();
FieldEntry fieldEntry = new FieldEntry();
swIt.Initialize(fieldList);
swIt.Start(fieldList);
fieldEntry.FieldID = 22;
swIt.Bind(fieldEntry);
swIt.SetReal(100, MagnitudeTypeEnum.ExponentNeg2);

swIt.Complete();

postMessage.Payload = fieldList;

I can't find any reference to the ContainerType in the docs or in the library. How do we set this value? and what is the difference between RSSL_DT_FIELD_LIST & RSSL_DT_MSG?

Thanks

Andrew

Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @andrewjharvey

    Thank you for reaching out to us.

    Messages can be nested. For example, an update message that contains a field list can be nested in a post message.

    You can refer to the StarterConsumer_Post example in the RFA.NET package. Please check the SubmitPostMsgWithMsg method in the StarterConsumer_Post.cs file.

    The method posts a post message that contains a refresh message. You may need to change it to post a post message that contains an update message instead.

    I assumed you post a message to the ContributionChannel through RTDS (ADS). For more information, please refer to the Contributing your data to Refinitiv article.