diff --git a/fairmq/FairMQDevice.cxx b/fairmq/FairMQDevice.cxx index d507afcd..a1936f9e 100644 --- a/fairmq/FairMQDevice.cxx +++ b/fairmq/FairMQDevice.cxx @@ -923,6 +923,41 @@ shared_ptr FairMQDevice::AddTransport(const string& tran } } +unique_ptr FairMQDevice::MakeTransport(const string& transport) +{ + unique_ptr tr; + + if (transport == "zeromq") + { + tr = FairMQ::tools::make_unique(); + } + else if (transport == "shmem") + { + tr = FairMQ::tools::make_unique(); + } +#ifdef NANOMSG_FOUND + else if (transport == "nanomsg") + { + tr = FairMQ::tools::make_unique(); + } +#endif + else + { + LOG(ERROR) << "Unavailable transport requested: " << "\"" << transport << "\"" << ". Available are: " + << "\"zeromq\"" + << "\"shmem\"" +#ifdef NANOMSG_FOUND + << ", \"nanomsg\"" +#endif + << ". Returning nullptr."; + return tr; + } + + tr->Initialize(nullptr); + + return move(tr); +} + void FairMQDevice::SetTransport(const string& transport) { if (fTransports.empty()) diff --git a/fairmq/FairMQDevice.h b/fairmq/FairMQDevice.h index a40554de..fb5e891e 100644 --- a/fairmq/FairMQDevice.h +++ b/fairmq/FairMQDevice.h @@ -336,6 +336,10 @@ class FairMQDevice : public FairMQStateMachine, public FairMQConfigurable /// @param transport Transport string ("zeromq"/"nanomsg"/"shmem") void SetTransport(const std::string& transport = "zeromq"); + /// Creates stand-alone transport factory + /// @param transport Transport string ("zeromq"/"nanomsg"/"shmem") + static std::unique_ptr MakeTransport(const std::string& transport); + void SetConfig(FairMQProgOptions& config); const FairMQProgOptions* GetConfig() const {