1 #define TRACE_NAME "TransferOutput"
2 #include "artdaq/ArtModules/ArtdaqOutput.hh"
4 #include "artdaq/DAQdata/NetMonHeader.hh"
5 #include "artdaq/TransferPlugins/MakeTransferPlugin.hh"
6 #include "artdaq/TransferPlugins/TransferInterface.hh"
42 virtual void SendMessage(artdaq::Fragment::sequence_id_t sequenceId, artdaq::Fragment::type_t messageType, TBufferFile & msg);
45 size_t send_timeout_us_;
46 size_t send_retry_count_;
47 std::unique_ptr<artdaq::TransferInterface> transfer_;
53 send_timeout_us_(ps.get<size_t>(
"send_timeout_us", 5000000)),
54 send_retry_count_(ps.get<size_t>(
"send_retry_count", 5)) {
55 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::TransferOutput(ParameterSet const& ps)";
57 TLOG(TLVL_DEBUG) <<
"END: TransferOutput::TransferOutput";
61 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::~TransferOutput()";
63 auto sts = transfer_->transfer_fragment_reliable_mode(std::move(*artdaq::Fragment::eodFrag(0)));
65 transfer_.reset(
nullptr);
66 TLOG(TLVL_DEBUG) <<
"End: TransferOutput::~TransferOutput()";
70 TLOG(TLVL_DEBUG) <<
"Sending message with sequenceID=" << sequenceId <<
", type=" << (int)messageType
71 <<
", length=" << msg.Length();
73 header.
data_length =
static_cast<uint64_t
>(msg.Length());
74 artdaq::Fragment fragment(std::ceil(msg.Length() /
static_cast<double>(
sizeof(artdaq::RawDataType))), sequenceId, 0,
77 memcpy(&*fragment.dataBegin(), msg.Buffer(), msg.Length());
81 sts = transfer_->transfer_fragment_min_blocking_mode(fragment, send_timeout_us_);
86 if (messageType == artdaq::Fragment::InitFragmentType)
88 std::fstream ostream(
"sendInitMessage_TransferOutput.bin", std::ios::out | std::ios::binary);
89 ostream.write(msg.Buffer(), msg.Length());
This is the base class for artdaq OutputModules, providing the serialization interface for art Events...
~TransferOutput()
TransferOutput Destructor.
std::unique_ptr< artdaq::TransferInterface > MakeTransferPlugin(const fhicl::ParameterSet &pset, std::string plugin_label, TransferInterface::Role role)
Load a TransferInterface plugin.
TransferOutput(fhicl::ParameterSet const &ps)
TransferOutput Constructor.
virtual void SendMessage(artdaq::Fragment::sequence_id_t sequenceId, artdaq::Fragment::type_t messageType, TBufferFile &msg)
Send a message using the Transfer Plugin
An art::OutputModule which sends events using DataSenderManager. This module is designed for transpor...
This TransferInterface is a Sender.
Some error occurred, but no exception was thrown.
The send operation completed successfully.