This section describes the usage of the OnixS::FIX::SBE::EventBasedDecoder class together with OnixS::FIX::SBE::IDecodeListener interface.
SBE decoder could be used in a callback mode, which called 'event based' one. Within this mode, decoder does not create FIX message by itself, but instead of this, it notifies a user about different stages of the decoding process. These notification are sent using special interface (OnixS::FIX::SBE::IDecodeListener), which should be passed to the decoder as parameter of OnixS::FIX::SBE::EventBasedDecoder::decodeSingleMessage method.
See the table below to consult about decoding process stages and callbacks.
Decoder position | Listener callback | ||
Message decode beginning Decoder just got template identifier from input SBE stream and appropriate FIX message type identifier was detected. Both identifiers are passed to the callback through appropriate parameters. | OnixS::FIX::SBE::IDecodeListener::onBeginMessage | ||
Simple field | Field value decoded Decoder just decoded a simple field; it means that appropriate input data was read from the input data stream. The "simple" term means a field of elementary or composite SBE type. The order of a field decoding corresponds exactly to order of these fields in the SBE template. Note: When decoding results in NULL value, there is no callback performed. | OnixS::FIX::SBE::IDecodeListener::onValue (depends on the actual field type) | |
Sequence | Sequence beginning Decoder just desired that input data contains non-empty sequence (length of the sequence is not zero). No any entries were decoded yet. Note, that there are no separate call for the length field: length of the sequence is passed to the callback through appropriate parameter. See SBE specification about <group> instruction for details about sequence tag detection scheme. | OnixS::FIX::SBE::IDecodeListener::onBeginSequence | |
Sequence entry (steps repeated for each one entry of the sequence) | Entry beginning Decoder just desired index of the current entry. This index is passed through appropriate parameter of the callback. | OnixS::FIX::SBE::IDecodeListener::onBeginSequenceEntry | |
Entry body The sequence entry could be of any type allowed by SBE specification: a simple field or embedded sequence. Therefore, the decoder will generate callback(s) here in accordance to the template specification. | Depend on a type of the entry. | ||
Entry ended Decoder just finished decoding of the entry. | OnixS::FIX::SBE::IDecodeListener::onEndSequenceEntry | ||
Sequence ended Decoder finished sequence decoding. | OnixS::FIX::SBE::IDecodeListener::onEndSequence | ||
Message decode ended Message decoding was successfully completed. | OnixS::FIX::SBE::IDecodeListener::onEndMessage |
Whenever decoder meets data or another error occurs, it just throws C++ exception of the OnixS::FIX::Exception type. Decoding process becomes broken, and no more callback will be performed.