- OnData() channel data handler.
- ConditionalRun() for devices without incoming data.
- Header file with common main(), to be extended with getDevice/addCustomOptions.
- Update examples (MQ/Tutorial3) to use the new API and config.
- NewSimpleMessage() for simpler creation of small messages (additional copy).
- Replace SetProperty/GetProperty with fConfig access.
- Runtime configurable channel names for common devices.
- Configurable logging interval per channel.
- FairMQMultiplier for distributing same data to multiple outputs.
- Cleanup state machine messages.
- Cmd option to toggle signal handling.
- Simpler API for send/receive timeouts.
- Enable --log-to-file.
- Fix coverity issues, warnings.
- Various code cleanup and minor tweaks.
- Remove old cmd options --config-json-file and --config-xml-file.
Now handled by --mq-config with file extension detection.
- Fix --config-json-string and --config-xml-string
- Move config-key to proper place (in --help)
- Update DDS example command UI and extract it from example.
- Unify address handling via DDS properties for dynamic deployment.
- Update DDS docs with the new approach.
- Allow `--config-key` to be used to access common config in JSON.
- Allow common channel properties to be specified for all sockets.
- Update MQ examples and Tuto3 with new config options.
- Add start scripts to MQ examples for easier use.
Initialize all data members in initializer lists.
Reorder data members in initializer list to have the same order as in the class declaration.
Comment or remove unused parameters and unused variables.
Convert all old style casts to the correct and explicit c++ cast like const_cast, static_cast,
dynamic_cast or reinterpret_cast. In most cases static_cast is used.
- Extend the multipart API to allow sending vectors of messages or helper
thin wrapper FairMQParts. See example in examples/MQ/8-multipart.
- NewMessage() can be used in devices instead of
fTransportFactory->CreateMessage().
Possible arguments remain unchanged (no args, size or data+size).
- Send()/Receive() methods can be used in devices instead of
fChannels.at("chan").at(i).Send()/Receive():
Send(msg, "chan", i = 0), Receive(msg, "chan", i = 0).
- Use the new methods in MQ examples and tests.
- No breaking changes, but FAIRMQ_INTERFACE_VERSION is incremented to 3
to allow to check for new methods.
- Remove the compile time check of the transport implementation.
The transport (zeromq/nanomsg) can be chosen at run time with:
`device.SetTransport("zeromq"); // possible values are "zeromq" and "nanomsg"`.
For devices that use FairMQProgOptions, the transport can be configured via cmd option:
`--transport zeromq` or `--transport nanomsg`. Default values is "zeromq".
The device receives the configured value with:
`device.SetTransport(config.GetValue<std::string>("transport"));`
Old method of setting transport still works. But the NANOMSG constant is not defined.
- Remove old `fairmq/prototest` directory. It was only used as a test for protobuf.
The protobuf part of Tutorial3 does the same (with different values).
- Fix a bug in FairMQPollerNN, where the `revents` value was not initialized.
This caused the `poller->CheckOutput()` to trigger when it should not.
Both FairMQLogger and FairMQStateMachine use Boost Fusion internaly.
Because the state machine needs FUSION_MAX_VECTOR_SIZE 20 defined,
same value has to be defined in the logger, otherwise Fusion is not
properly compiled.
a) move the XML parser into the FairMQ/options/FairMQParser.h
b) add a routine in FairMQProgOption to check whether the necessary XML or JSON input files are there, and send an error message if not there
- Policy based devices:
a) rename GenericSampler to base_GenericSampler and use an alias template named GenericSampler
b) in base_GenericSampler, rename template parameter to simple variables <T,U,… > and use typedef for clarity
c) introduce an anonymous function container in the base_GenericSampler host class with a register task template member function and an Executetasks()
d) add two new template parameters in base_GenericSampler for the anonymous function container map. parameter is K for the key type (default=int) and L for the value type (default=std::function<void()>)
- Tutorial7:
a) use FairMQProgOption to configure devices in tutorial7
b) introduce several template functions helper in tutorial7 to reduce code redundancy
c) show examples in tutorial7 of task registration with callback and lambda expression for the sampler devices
d) separate the executable build of the tutorial7 data generator to remove the Roofit banner when executing the MQdevices