1 #define TRACE_NAME "TransferOutput"
2 #include "artdaq/ArtModules/ArtdaqOutput.hh"
5 #include "artdaq/DAQdata/NetMonHeader.hh"
6 #include "artdaq/TransferPlugins/MakeTransferPlugin.hh"
7 #include "artdaq/TransferPlugins/TransferInterface.hh"
45 size_t send_timeout_us_;
46 size_t send_retry_count_;
47 std::unique_ptr<artdaq::TransferInterface> transfer_;
51 :
ArtdaqOutput(ps), send_timeout_us_(ps.get<size_t>(
"send_timeout_us", 5000000)), send_retry_count_(ps.get<size_t>(
"send_retry_count", 5))
53 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::TransferOutput(ParameterSet const& ps)";
55 TLOG(TLVL_DEBUG) <<
"END: TransferOutput::TransferOutput";
60 TLOG(TLVL_DEBUG) <<
"Begin: TransferOutput::~TransferOutput()";
62 auto sts = transfer_->transfer_fragment_min_blocking_mode(*artdaq::Fragment::eodFrag(0), 10000);
64 transfer_.reset(
nullptr);
65 TLOG(TLVL_DEBUG) <<
"End: TransferOutput::~TransferOutput()";
70 TLOG(TLVL_DEBUG) <<
"Sending message with sequenceID=" << fragment->sequenceID() <<
", type=" << fragment->type()
71 <<
", length=" << fragment->dataSizeBytes();
76 sts = transfer_->transfer_fragment_min_blocking_mode(*fragment, send_timeout_us_);
79 if (retries > send_retry_count_)
81 TLOG(TLVL_ERROR) <<
"Error communicating with remote after " << retries <<
" tries. Closing art process";
82 kill(getpid(), SIGUSR2);
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.
virtual void SendMessage(artdaq::FragmentPtr &msg)
Send a message using the Transfer Plugin
TransferOutput(fhicl::ParameterSet const &ps)
TransferOutput Constructor.
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.