Step 1: Frame decoder
Step 2: Validate message by confirming checksum
Step 3: Convert to key/val map
Step 4: Confirm all required fields are available
        Step 4.1: If logged in, send back msg reject
        Step 4.2 If not logged in, disconnect with error
Step 5: Confirm first message is a logon with heartbeat
        Step 5.1: If not, disconnect with error
        Step 5.2: If so, confirm not already logged in
        Step 5.3: Logged in
        Step 5.4 Load crash-recovery msgs
Step 6: Confirm incoming sequence number
        Step 6.1: If sequence reset with gap-fill
                Step 6.1.1: If new seqnum <= current seqnum: reject
                Step 6.1.2: reset seqnum
        Step 6.2: If seqnum too low, disconnect with error
Step 7: Confirm compids and fix versions
Step 8: Record incoming msgs
Step 9: Handle session messages
        Heartbeat:
        ResendRequest: Send back requested range
        Logout:
Step 10: Forward to application
