Реализован клиент C++, который устанавливает 8 сеансов и читает с сервера. Я обрабатываю следующие сообщения: Logon/Logoff/TradeCaptureReport и ExecutionReport.
Мои вопросы ниже:
Должен ли я отслеживать порядковые номера полученных сообщений, обнаруживать недостающие наборы сообщений и выполнять запрос на повторную отправку, или библиотека FIX8 обрабатывает это в фоновом режиме? Например, когда клиент выходит из строя или возникает проблема с сетью.
При отправке сообщений у меня есть приведенный ниже код для увеличения порядкового номера исходящих сообщений. Когда я использую первый код, я получаю разные сообщения с одним и тем же порядковым номером (Tag34) в течение одного сеанса. Если я использую второй код (всегда возвращаю 1), я не получаю ничего, кроме сообщений о входе в систему.
int my_session_client::getNextSendSeqNo()
{
#if FIRST
_next_send_seq = ++send_seqnum;
return send_seqnum;
#else
return 1;
#endif
}
Вышеуказанная функция вызывается в нескольких функциях отправки сообщений, как показано ниже:
FIX8::Message *my_session_client::generate_sequence_reset(const unsigned newseqnum, const bool gapfillflag)
{
FIX8::Message *msg(Session::generate_sequence_reset(newseqnum, gapfillflag));
*msg << new FIX8::Paragon::SenderSubID(sender_subid_); /// crucial step.
msg->set_custom_seqnum(getNextSendSeqNo());
return msg;
}
BodyLength (9): 0
MsgType (35):
MsgSeqNum (34): 1
Logon ("A")
SenderSubID (50): **
EncryptMethod (98): 0
HeartBtInt (108): 36000
ResetSeqNumFlag (141): Y
Username (553): **
Password (554): ****
DefaultApplVerID (1137): 9
trailer ("trailer")
CheckSum (10):
msg->set_custom_seqnum(1);
*msg->Header() << new FIX8::My::MsgSeqNum(1)
/дакка