Как жестко закодировать настройки

Как я могу жестко закодировать настройки инициатора и акцептора, чтобы мне не нужен внешний файл настроек?

Это то, что я пробовал до сих пор:

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

Есть идеи?

0

Решение

Это не имеет ничего общего со значением «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 звонки для того, чтобы это работало. Что, по крайней мере для меня, помешало бы мне пойти по этому пути.

1

Другие решения

После долгой борьбы мне наконец удалось сделать это правильно. Вот функциональный код для жесткого кодирования настроек в акцепторе, также может быть применен в инициаторе:

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;
}
1

По вопросам рекламы [email protected]