Today I've spent quite a lot of time trying to make the repeated groups work neatly, and it's just about there now.

Far more importantly, I've integrated the FIX stuff with the network stuff and have a working logon sequence:

Constructing FIX engine: CLIENT
About to send: 8=FIX.4.0|9=42|35=A|49=CLIENT|56=SERVER|34=1|98=0|108=30|10=186|
Got a message of type A
Handling logon message
BeatingHeart constructor(delay = 4 seconds)
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=2|10=142|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=3|10=143|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=4|10=144|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=5|10=145|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=6|10=146|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=7|10=147|
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=8|10=148|
Got a message of type 0
About to send: 8=FIX.4.0|9=30|35=0|49=CLIENT|56=SERVER|34=9|10=149|
About to send: 8=FIX.4.0|9=31|35=0|49=CLIENT|56=SERVER|34=10|10=190|


That output is currently missing 52 (SendingTime) tags, but that's easy enough to put in. There are two heartbeat threads running - one giving the server a kick (message type "0") every 4 seconds, and one doing the same to the client every 30, as specified by the logon ("A") messages.

So, now to connect this to my order book...