<div dir="ltr"><div class="gmail_default" style="font-size:small;color:#000000">There are plans in motion to reduce the public API.</div><div class="gmail_default" style="font-size:small;color:#000000"><br></div><div class="gmail_default" style="font-size:small;color:#000000">But at the same time, the docs and examples are pretty clear on what a basic QF application should look like.  It sometimes astounds me how some developers can get so far off the mark, as if they've accepted a personal challenge to avoid reading the instructions that are <i>right. there.</i></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 26, 2019 at 9:57 AM Matthias Güntert <<a href="mailto:matthias.guentert@raiffeisen.ch">matthias.guentert@raiffeisen.ch</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="DE-CH">
<div class="gmail-m_3965467048460070881WordSection1">
<p class="MsoNormal"><span style="font-size:10pt;font-family:Verdana,sans-serif">Hello Grant<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Verdana,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Thanks for replying and clarifying. I will get in contact with the counterparty regarding the multipart market data or come up with
 my own solution. <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">One more thing. If user code is not intended to work with the message store please mark it as internal or private, also if user code
 shouldn’t subclass from SocketInitiator please mark it as sealed and reduce the API surface.
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Thanks again and best regards, Matthias<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="DE" style="font-size:11pt;font-family:Calibri,sans-serif">Von:</span></b><span lang="DE" style="font-size:11pt;font-family:Calibri,sans-serif"> Quickfixn [mailto:<a href="mailto:quickfixn-bounces@lists.quickfixn.com" target="_blank">quickfixn-bounces@lists.quickfixn.com</a>]
<b>Im Auftrag von </b>Grant Birchmeier<br>
<b>Gesendet:</b> Mittwoch, 26. Juni 2019 16:36<br>
<b>An:</b> Mailing list for QuickFIX/n <<a href="mailto:quickfixn@lists.quickfixn.com" target="_blank">quickfixn@lists.quickfixn.com</a>><br>
<b>Betreff:</b> Re: {{Quickfixn}} MemoryMessageStore only holds outgoing messages<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:black">Ok, let's start with the most important point: 
<b>The message store is for internal use only.  User code is not intended to read from, write to, or interact with the message store at any time.</b><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I don't believe the docs ever indicate or instruct that developers ever do anything with the message store (please correct me if I'm wrong), but every so often someone gets it in their head to do that.  Don't do
 it.  The store is for the engine to remember its internal state and respond to session-level resend requests.  It's not meant for application-code interaction.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="color:black">Next:</span></b><span style="color:black">  Why are you subclassing from SocketInitiator?  I guarantee that there are no official docs or examples instructing you to do that.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Have you looked at the examples?  I really recommend looking at the examples.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><a href="https://github.com/connamara/quickfixn/tree/master/Examples" target="_blank">https://github.com/connamara/quickfixn/tree/master/Examples</a></span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><b><span style="color:black">Regarding the MarketDataRefresh data flow:</span></b><span style="color:black"> I think you are looking for a feature that QF does not provide.  FIX just specifies a message-transmission platform and a set of
 suggested message definitions.  How those messages are used, abused, or redefined strongly depends on the counterparty.  Their docs should supercede anything you know or think you know about how things should work.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">If the MarketData is multipart, it is on you to create the storage structures to hold that data and compute it when the reception is complete. I myself have done that before.  In my case, the counterparty's message
 definition contained fields telling how many messages should be expected and an index field to identify each message's place in the sequence.  I had to code my own logic to recognize when a data set was complete, and I think I had a worker thread monitoring
 the storage to identify when a data set was incomplete after a timeout period.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">-Grant</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><u></u> <u></u></span></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Jun 26, 2019 at 2:15 AM Matthias Güntert <<a href="mailto:matthias.guentert@raiffeisen.ch" target="_blank">matthias.guentert@raiffeisen.ch</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Verdana,sans-serif">Hello
</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">I am building a C# solution based on QuickFix/ 1.8.0.
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Below is the basic structure of my application. I see replies coming in from our counterparty, but unfortunately
 they don’t show up in the message store type, which in this case is a MemoryStore. However I do see all outgoing messages, like logon, heartbeat and the market data request messages.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">The challenge behind this issue is that one market data request results in many replies (of type: MarketDataSnapshotFullRefresh)
 on which I have to do some calculations upon.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Following a couple of questions:
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="gmail-m_3965467048460070881gmail-m3010936884183767172msolistparagraph"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">1.</span><span lang="EN-US" style="font-size:7pt">   
</span><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Why is quickfix behaving this way? Do I have to explicitly add the replies to the store?</span><u></u><u></u></p>
<p class="gmail-m_3965467048460070881gmail-m3010936884183767172msolistparagraph"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">2.</span><span lang="EN-US" style="font-size:7pt">   
</span><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">What is the intended way to synchronize / control the request/reply dataflow?</span><u></u><u></u></p>
<p class="gmail-m_3965467048460070881gmail-m3010936884183767172msolistparagraph"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">3.</span><span lang="EN-US" style="font-size:7pt">   
</span><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">How do I know, at which point all requested replies have been received?</span><u></u><u></u></p>
<p class="gmail-m_3965467048460070881gmail-m3010936884183767172msolistparagraph"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">4.</span><span lang="EN-US" style="font-size:7pt">   
</span><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">What is the best way to await a logon to complete?</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Thanks and Best regards,
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif">Matthias Güntert</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Verdana,sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">public class FixMessageHandler : MessageCracker, IApplication</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">{</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       private Session _session;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">      
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       [...]</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">      
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       public void OnCreate(SessionID sessionID)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             this._session = Session.LookupSession(sessionID);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">      
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       public void FromApp(Message message, SessionID sessionID)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             try</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">                    Crack(message, sessionID);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             catch (UnsupportedMessageType ex)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">                    [...]</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       public void OnMessage(MarketDataSnapshotFullRefresh message, SessionID sessionId)</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:35.4pt">
<span lang="EN-US" style="font-size:10pt;font-family:Consolas">{</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:35.4pt">
<span lang="EN-US" style="font-size:10pt;font-family:Consolas">       this._logger.Info(“MarketDataSnapshotFullRefresh received”);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:35.4pt">
<span lang="EN-US" style="font-size:10pt;font-family:Consolas">}</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:35.4pt">
<span lang="EN-US" style="font-size:10pt;font-family:Consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       […]</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">}</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">public class FixClient : SocketInitiator</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">{</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       [...]</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       public void SendRequest(MarketDataRequest request)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             Session.SendToTarget(request, this._sessionId);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">      
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       public void ReadReplies()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             var session = Session.LookupSession(this._sessionId);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             var messages = List<string>();</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             session.MessageStore.Get(0,100, messages)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">            
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">             [...]</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">       }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10pt;font-family:Consolas">}</span><u></u><u></u></p>
</div>
<p class="MsoNormal"><br>
*****************************************************<u></u><u></u></p>
<div>
<p class="MsoNormal">This e-mail may contain confidential material. It is intended only for the person or entity which it is addressed to. In case you should not be supposed to get this e-mail we ask you to delete it without
 taking notice of its content. Any views or opinions expressed in this e-mail are those of the sender and do not necessarily coincide with those of The Swiss Raiffeisen Group. Therefore this e-mail does not represent a binding agreement nor an offer to deal.
 E-Mail transmission can be insecure and can contain errors. Information could be intercepted, corrupted, lost, destroyed, incomplete or may contain viruses. Neither The Swiss Raiffeisen Group nor the sender can accept any liability for any kind of damage as
 the result of viruses or transmission errors.<u></u><u></u></p>
<div>
<p class="MsoNormal">*****************************************************<u></u><u></u></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
Quickfixn mailing list<br>
<a href="mailto:Quickfixn@lists.quickfixn.com" target="_blank">Quickfixn@lists.quickfixn.com</a><br>
<a href="http://lists.quickfixn.com/listinfo.cgi/quickfixn-quickfixn.com" target="_blank">http://lists.quickfixn.com/listinfo.cgi/quickfixn-quickfixn.com</a><u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10pt;background:white">Grant Birchmeier</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:10pt;color:rgb(51,51,255);background:rgb(255,204,0)">Connamara Systems, LLC</span></b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:10pt">Made-To-Measure Trading Solutions.</span></b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10pt">Exactly what you need. No more. No less.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10pt"><a href="http://connamara.com" target="_blank">http://connamara.com</a></span><u></u><u></u></p>
</div>
</div>
</div>
</div>

_______________________________________________<br>
Quickfixn mailing list<br>
<a href="mailto:Quickfixn@lists.quickfixn.com" target="_blank">Quickfixn@lists.quickfixn.com</a><br>
<a href="http://lists.quickfixn.com/listinfo.cgi/quickfixn-quickfixn.com" rel="noreferrer" target="_blank">http://lists.quickfixn.com/listinfo.cgi/quickfixn-quickfixn.com</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div><font size="2"><span style="background-color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255)">Grant Birchmeier</span></span></font><font size="2"><font color="#3333ff"><br></font></font></div><div><font size="2"><b><font color="#3333ff"><span style="background-color:rgb(255,204,51)"><span style="background-color:rgb(255,204,102)"><span style="background-color:rgb(255,204,153)"><span style="background-color:rgb(255,255,255)"><span style="background-color:rgb(255,204,0)">Connamara Systems, LLC</span></span></span></span></span></font></b></font><br></div><div><font size="2"><b>Made-To-Measure Trading Solutions.</b></font></div><div><font size="2">Exactly what you need. No more. No less.</font><font size="2"><b><font color="#3333ff"><br></font></b></font></div><div><font size="2"><a href="http://connamara.com" target="_blank">http://connamara.com</a><br></font></div></div>