EMA C++ Configuration Guide : 4 Enterprise Message API Configuration Processing : 4.5 Programmatic Configuration : 4.5.5 Example: Programmatic Configuration of an IProvider
 
4.5.5 Example: Programmatic Configuration of an IProvider
The following sample illustrates the Enterprise Message API programmatic configuration of an interactive provider:
 
 
Map outermostMap, innerMap;
ElementList elementList;
 
elementList.addAscii("DefaultIProvider", "Provider_1");
 
innerMap.addKeyAscii("Provider_1", MapEntry::AddEnum, ElementList()
        .addAscii("Server", "Server_1")
        .addAscii("Logger", "Logger_1")
        .addAscii("Directory", "Directory_1")
        .addUInt("ItemCountHint", 5000)
        .addUInt("ServiceCountHint", 5000)
        .addUInt("RequestTimeout", 5000)
        .addInt("DispatchTimeoutApiThread", 1)
        .addUInt("CatchUnhandledException", 0)
        .addUInt("MaxDispatchCountApiThread", 500)
        .addUInt("MaxDispatchCountUserThread", 500)
        .addAscii("XmlTraceFileName", " MyXMLTrace")
        .addInt("XmlTraceMaxFileSize", 70000000)
        .addUInt("XmlTraceToFile", 0)
        .addUInt("XmlTraceToStdout", 1)
        .addUInt("XmlTraceToMultipleFiles", 0)
        .addUInt("XmlTraceWrite", 0)
        .addUInt("XmlTraceRead", 0)
        .addUInt("XmlTracePing", 1)
        .addUInt("XmlTraceHex", 1)
        .addInt("PipePort", 9696)
        .addUInt("RefreshFirstRequired", 1)
        .addUInt("AcceptDirMessageWithoutMinFilters", 0)
        .addUInt("AcceptMessageSameKeyButDiffStream", 0)
        .complete())
        .complete();
 
elementList.addMap("IProviderList", innerMap).complete();
innerMap.clear();
 
outermostMap.addKeyAscii("IProviderGroup", MapEntry::AddEnum, elementList);
elementList.clear();
 
innerMap.addKeyAscii("Server_1", MapEntry::AddEnum, ElementList()
        .addEnum("ServerType", 0)
        .addEnum("CompressionType", 1)
        .addUInt("GuaranteedOutputBuffers", 5000)
        .addUInt("NumInputBuffers", 5000)
        .addUInt("ConnectionPingTimeout", 70000)
        .addAscii("Port", "14002")
        .addUInt("TcpNodelay", 1)
        .complete())
        .complete();
 
elementList.addMap("ServerList", innerMap).complete();
innerMap.clear();
 
outermostMap.addKeyAscii("ServerGroup", MapEntry::AddEnum, elementList);
elementList.clear();
 
innerMap.addKeyAscii("Logger_1", MapEntry::AddEnum,
        ElementList()
        .addEnum("LoggerType", 0)
        .addAscii("FileName", "logFileProv")
        .addEnum("LoggerSeverity", 1).complete())
        .complete();
 
elementList.addMap("LoggerList", innerMap).complete();
innerMap.clear();
 
outermostMap.addKeyAscii("LoggerGroup", MapEntry::AddEnum, elementList);
elementList.clear();
 
innerMap.addKeyAscii("Dictionary_1", MapEntry::AddEnum,
                ElementList()
        .addEnum("DictionaryType", 0)
        .addAscii("RdmFieldDictionaryItemName", "RWFFld")
        .addAscii("EnumTypeDefItemName", "RWFEnum")
        .addAscii("RdmFieldDictionaryFileName", "./RDMFieldDictionary")
        .addAscii("EnumTypeDefFileName",
        "./enumtype.def").complete()).complete();
 
elementList.addMap("DictionaryList", innerMap).complete();
innerMap.clear();
 
outermostMap.addKeyAscii("DictionaryGroup", MapEntry::AddEnum, elementList);
elementList.clear();
 
Map serviceMap;
 
serviceMap.addKeyAscii("DIRECT_FEED", MapEntry::AddEnum,
        ElementList()
        .addElementList("InfoFilter",
                ElementList().addUInt("ServiceId", 1)
                .addAscii("Vendor", "Vendor")
                .addUInt("IsSource", 1)
                .addUInt("AcceptingConsumerStatus", 1)
                .addUInt("SupportsQoSRange", 1)
                .addUInt("SupportsOutOfBandSnapshots", 1)
                .addAscii("ItemList", "#.itemlist")
                .addArray("Capabilities",
                        OmmArray().addAscii("MMT_MARKET_PRICE")
                        .addAscii("MMT_MARKET_BY_PRICE")
                        .addAscii("MMT_MARKET_BY_ORDER")
                        .addAscii("130")
                        .complete())
                .addArray("DictionariesProvided",
                        OmmArray().addAscii("Dictionary_1")
                        .complete())
                .addArray("DictionariesUsed",
                        OmmArray().addAscii("Dictionary_1")
                        .complete())
                .addSeries("QoS",
                        Series()
                        .add(
                                ElementList().addAscii("Timeliness", "Timeliness::RealTime")
                                .addAscii("Rate", "Rate::TickByTick")
                                .complete())
                        .complete())
                .complete())
        .addElementList("StateFilter",
                ElementList().addUInt("ServiceState", 1)
                .addUInt("AcceptingRequests", 1)
                .addElementList("Status",
                        ElementList()
                        .addAscii("StreamState", "StreamState::Open")
                        .addAscii("DataState", "DataState::Suspect")
                        .addAscii("StatusCode", "StatusCode::DacsDown")
                        .addAscii("StatusText", "dacsDown")
                        .complete())
                .complete())
        .complete())
    .complete())
 
innerMap.addKeyAscii("Directory_1", MapEntry::AddEnum, serviceMap).complete();
elementList.clear();
 
elementList.addMap("DirectoryList", innerMap).complete();
outermostMap.addKeyAscii("DirectoryGroup", MapEntry::AddEnum, elementList).complete();
 
...
 
OmmProvider
provider( OmmIProviderConfig().config(outermostMap).operationModel(
        OmmIProviderConfig::UserDispatchEnum ), appClient );