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...
