Как я могу жестко закодировать настройки инициатора и акцептора, чтобы мне не нужен внешний файл настроек?
Это то, что я пробовал до сих пор:
FIX::SessionSettings serverSettings;
FIX::Dictionary serverDictionary;
serverDictionary.setString("BeginString", "FIX.4.4");
serverDictionary.setString("UseDataDictionary", "Y");
serverDictionary.setString("DataDictionary", "../../../spec/FIX.4.4.xml");
serverDictionary.setString("SenderCompID", "SRVR");
serverDictionary.setString("TargetCompID", "CLNT");
serverDictionary.setString("SocketAcceptHost", "localhost");
serverDictionary.setLong("SocketAcceptPort", 2024);
FIX::SessionID serverSessionID;
serverSettings.set(serverSessionID, serverDictionary);
Server server; // Extends FIX::Application
FIX::FileStoreFactory serverStoreFactory("server/fileStore/");
FIX::FileLogFactory serverLogFactory("server/logs/");
FIX::SocketAcceptor acceptor(server, serverStoreFactory, serverSettings, serverLogFactory);
Я думаю, что я на правильном пути, но я получаю эту ошибку: Configuration failed: BeginString must be FIX.4.0 to FIX.4.4 or FIXT.1.1
Есть идеи?
Это не имеет ничего общего со значением «FIX.4.4» setString
определение, которое есть;
void Словарь :: setString (const std :: string& ключ, const std :: string& значение )
Он берет эти строки по ссылке, и вы передаете ему временную переменную, которая освобождается к тому времени. setString
пытается получить доступ к значению. Поскольку вы не можете изменить определение функции, вам нужно сделать;
std::string key = "current key";
std::string value = "current value";
serverDictionary.setString(key, value);
для всех setString
звонки для того, чтобы это работало. Что, по крайней мере для меня, помешало бы мне пойти по этому пути.
После долгой борьбы мне наконец удалось сделать это правильно. Вот функциональный код для жесткого кодирования настроек в акцепторе, также может быть применен в инициаторе:
try {
FIX::SessionSettings serverSettings;
FIX::Dictionary serverDictionary;
serverDictionary.setString("ConnectionType", "acceptor");
serverDictionary.setString("DataDictionary", "FIX.4.4.xml");
serverDictionary.setString("StartTime", "00:00:00");
serverDictionary.setString("EndTime", "00:00:00");
serverDictionary.setString("SocketAcceptHost", "localhost");
serverDictionary.setString("SocketAcceptPort", "2024");
FIX::SessionID serverSessionID("FIX.4.4", "SRVR", "CLNT");
serverSettings.set(serverSessionID, serverDictionary);
Server server;
FIX::FileStoreFactory serverStoreFactory("server/fileStore/");
FIX::FileLogFactory serverLogFactory("server/logs/");
FIX::SocketAcceptor acceptor(server, serverStoreFactory, serverSettings, serverLogFactory);
acceptor.start();
// do something
acceptor.stop();
return 0;
} catch (FIX::ConfigError& e) {
std::cout << e.what() << std::endl;
return 1;
}