TargetID
- ИМЯ коробки
куда вы отправляете сообщение, если
вам нужно различать сессии
для нескольких клиентов (я предполагаю в
один сервер) просто дайте каждому клиенту
разные SenderCompID
.
На вашем сервере вы должны настроить один сеанс для каждого клиента.
Пример для одного сеанса сервер-клиент:
На вашем сервере (INCA):
[SESSION]
BeginString=FIX.4.0
SenderCompID=INCA
TargetCompID=CLIENT1
На вашем клиенте (КЛИЕНТ1):
[SESSION]
BeginString=FIX.4.0
SenderCompID=CLIENT1
TargetCompID=INCA
quickfixengine различает сессию
(соединение сервер-клиент) на основе
эти 3 значения: (BeginString,
TargetCompID, SenderCompID)
Когда вы отправляете сообщение, вы помещаете свой
идентификационный номер как sendercompid
и
цель, куда вы отправляете сообщение
как targetcompid
. Вы указываете
beginstring
на основе исправления
версия, которую вы хотите использовать для
общаться (FIX4.0
/ FIX4.2
....).
Пользовательские поля зависят от того, что
точно требуется. Протокол FIX
определяет настраиваемые поля с
FieldID больше чем зарезервированный
диапазон, так что ваши настраиваемые поля могут
начать с FieldID 5000.
Есть несколько вариантов
как это сделать. Самый простой
это просто использовать числовое значение
сообщения и добавить его в сообщение (я
Предположим, вы используете C ++, но это похоже
с другими языками).
Что-то вроде:
msg.setField(5000,"SomeValue");
Это настраиваемое поле не будет
проверяется автоматически, потому что FIX
не знает об этом. FIX использует xml
файлы, где каждое сообщение и поле
указано.
Существует правильная процедура для добавления
новое сообщение в спецификации XML, а затем
восстановить код быстрого исправления
генерировать новые структуры поля, но так
далеко мне не нужно было это делать.
взломщик сообщений - это просто метод
который принимает указатель на общий
сообщение, а затем он смотрит на
идентификатор сообщения (если я помню) и звонки
соответствующий обработчик.
Это одно большое заявление с множеством
строковых операций, поэтому иногда
лучше сделать проверку
себя, но вы должны быть в порядке, чтобы
используйте это.
Вот как выглядит метод, вы получите идею:
void crack( const Message& message,
const FIX::SessionID& sessionID )
{
const std::string& msgTypeValue
= message.getHeader().getField( FIX::FIELD::MsgType );
if( msgTypeValue == "0" )
onMessage( (const Heartbeat&)message, sessionID );
else
if( msgTypeValue == "A" )
onMessage( (const Logon&)message, sessionID );
else
if( msgTypeValue == "1" )
onMessage( (const TestRequest&)message, sessionID );
else
Затем вы обычно реализуете
соответствующий метод, как, например,
если вы заботитесь только о
ExecutionReport
s вы внедряете в
ваш код:
virtual void onMessage( ExecutionReport&, const FIX::SessionID& );
Тогда ваше приложение получит
ExecutionReport
так что вы можете
обработайте это. Методы onMessage
для сообщений, которые вы не делаете
реализовать просто ничего не делать и
вернуть, чтобы сообщение никогда не попадало
Ваша заявка.