#ifndef FIX_SESSIONFACTORY_H
#define FIX_SESSIONFACTORY_H
#ifdef _MSC_VER
#pragma warning(disable : 4503 4355 4786 4290)
#endif
#include "Dictionary.h"
#include "Exceptions.h"
#include "Log.h"
namespace FIX {
class SessionID;
class Session;
class Application;
class MessageStoreFactory;
class DataDictionaryProvider;
class SessionFactory {
public:
SessionFactory(Application &application, MessageStoreFactory &messageStoreFactory, LogFactory *pLogFactory)
: m_application(application),
m_messageStoreFactory(messageStoreFactory),
m_pLogFactory(pLogFactory) {}
~SessionFactory();
Session *create(const SessionID &sessionID, const Dictionary &settings) EXCEPT(ConfigError);
void destroy(Session *pSession);
private:
typedef std::map<std::string, std::shared_ptr<DataDictionary>> Dictionaries;
std::shared_ptr<DataDictionary> createDataDictionary(
const SessionID &sessionID,
const Dictionary &settings,
const std::string &settingsKey) EXCEPT(ConfigError);
void processFixtDataDictionaries(
const SessionID &sessionID,
const Dictionary &settings,
DataDictionaryProvider &provider) EXCEPT(ConfigError);
void processFixDataDictionary(
const SessionID &sessionID,
const Dictionary &settings,
DataDictionaryProvider &provider) EXCEPT(ConfigError);
std::string toApplVerID(const std::string &value);
Application &m_application;
MessageStoreFactory &m_messageStoreFactory;
LogFactory *m_pLogFactory;
Dictionaries m_dictionaries;
};
}
#endif