Re: [Quickfix-developers] Parsing text field(tag=58) in QuickFix "email" message
Brought to you by:
orenmnero
From: Grant B. <gbi...@co...> - 2020-02-06 22:34:14
|
You're trying to access field 58 like it's a top-level field. In the Email (35=C) message, it is NOT a top-level field, so the engine has not defined a get(text) function for this message type. It's in the LinesOfText repeating group. You need to check the docs at the bottom of this page ("Reading Messages With Repeating Groups"): http://www.quickfixengine.org/quickfix/doc/html/repeating_groups.html You've got to first extract the LinesOfText group, then call get(text) on *that*. On Thu, Feb 6, 2020 at 3:58 PM Shubhi Agarwal <sh...@to...> wrote: > QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/ > > Hi, > I have created a QuickFix server and a client who are communicating with > each other in Email type messages (msgType = "C"). > > Code on the server to create Email message: > > std::cout << "Creating email message" << std::endl; > FIX44::Email email = FIX44::Email( > FIX::EmailThreadID("abc"), > FIX::EmailType(FIX::EmailType_NEW), > FIX::Subject("0")); > json j; > j["Client_Name"] = "TESTCLIENTNAME"; > j["Client_Alias"] = "TESTCLIENTNAME"; > j["TimeStamp"] = "86537573786783"; > > //email.setField(58, "Cancel My Order!"); > > std::string jsonDump = j.dump(); > email.setField(58, jsonDump); > email.setField(33,"1"); > > On the client side, I am able to parse all fields except tag = 58. The > onMessage function on client end looks like this: > > void onMessage(const FIX44::Email& message, const > FIX::SessionID& sessionID) override > { > std::cout << "On message called" << std::endl; > FIX::EmailThreadID emailThreadId; > FIX::EmailType emailType; > FIX::NoLinesOfText noLinesOfText; > message.get(emailType); > message.get(emailThreadId); > int int_noLines = > std::atoi(message.getField(noLinesOfText).getString().c_str()); > > if(emailType == FIX::EmailType_NEW) > { > FIX::Text text; > for(int i=0; i < int_noLines; i++){ > std::cout << "Hey " << i << > std::endl; > message.get(text); *//This line > is giving compilation error* > } > > std::cout << " Email received with type = > request " << std::endl; > FIX44::Email email = FIX44::Email( > FIX::EmailThreadID(emailThreadId), > > FIX::EmailType(FIX::EmailType_REPLY), > FIX::Subject("1")); > try > { > FIX::Session::sendToTarget( email, > sessionID ); > std::cout << "Email response sent > " << std::endl; > } > catch ( FIX::SessionNotFound& ) {} > } > } > > Can someone please help me to figure out how to parse the text field in > the incoming email message. I am using fix44. > > Thanks and regards > Shubhi Agarwal > Core Engineering Software Developer > Risk Front End, Risk Technology (India) > p: +91-124-452-4911 > > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers -- Grant Birchmeier *Connamara Systems, LLC* *Made-To-Measure Trading Solutions.* Exactly what you need. No more. No less. http://connamara.com -- This email, along with any attachments, is confidential. If you believe you received this message in error, please contact the sender immediately and delete all copies of the message. Thank you from Connamara Systems, LLC. |