* move Plugins::Version to fair::mq::tools
* fix Parser interface
* make device a shared pointer in main
* provide std::hash template specialization
* fix FairMQ.Plugins/FairMQ.PluginsStatic when run with ctest
* fix MQ/serialization example
* add --no-as-needed flag
* GCC 4 does not support member refs, move to pointer types
* FairMQTransportFactoryZMQ: move the config invariant
initialization to ctor
* FairMQChannel: add new ctor that creates usable channel
* FairMQSocket*: close sockets in dtor
* FairMQTransportFactory*: terminate context in dtor
* FairMQChannel: add Bind/Connect facades (for explicit control, e.g. timing)
- give transport Initialize() method with access to device config.
- avoid using global context in the transport.
- simplify shutdown procedure (no need for extra thread).
- Avoid polling when only one input channel is used.
- Send only handles for shared memory transport.
- Avoid waiting in the rate logger thread when nothing to log.
- Hide warnings from generated files
- Fix#483
- Convert factory methods to return smart ptrs.
- Refactor state machine to use same thread for user states.
- Remove unused includes and dependencies, use std.
Sent messages will be scheduled among the endpoints according to socket
type: PUB will send the same data to all endpoints simultaneously, PUSH
will do round robin transfer.
Incoming data is fair queued between endpoints.
This is a feature of at least zeromq and nanomsg.
_____________
To use: in the device configuration, instead of specifying just one address,
specify a comma separated list e.g.
tcp://localhost:123,ipc:///tmp/socket
the connection method (bind/connect) applies to all endpoints in this case.
______________
Mixing binding and connecting endpoints is supported:
prefix "@" means "bind", "+" (or ">") means connect, e.g.
+tcp://localhost:123,@ipc:///tmp/socket,ipc:///tmp/asd
(in case of missing prefix, the default channel method is used for that
endpoint).
- 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.
- Add shared memory example in examples/MQ/SharedMemory
- Device/Task termination: try soft first, and abort if it fails
- Interactive mode: prevent cin from blocking forever (poll)
- 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.
- Add FlatBuffers serialization example to Tutorial 3
- Add MessagePack serialization example to Tutorial 3
- Performance improvements in Boost serialization example
- Use `GetEntriesFast()` for FairTestDetectorRecoTask
- Use `Clear()` instead of `Delete()` in MQ parts of Tutorial 3
- Fix CMake variables from preventing compilation without nanomsg.
- create macro/data directories in install directory
- Get rid of data duplication in fill_parameters.C
- Various cleanups and fixes
- 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.