1 #ifndef ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
2 #define ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
4 #include "artdaq/DAQrate/StatisticsHelper.hh"
5 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
6 #include "fhiclcpp/ParameterSet.h"
7 #include "fhiclcpp/types/Atom.h"
8 #include "fhiclcpp/types/ConfigurationTable.h"
10 #include <sys/epoll.h>
11 #include <boost/thread.hpp>
27 fhicl::Atom<int>
routing_token_port{fhicl::Name{
"routing_token_port"}, fhicl::Comment{
"Port to listen for routing tokens on"}, 355555};
38 explicit TokenReceiver(
const fhicl::ParameterSet& ps, std::shared_ptr<RoutingManagerPolicy> policy,
39 size_t update_interval_msec);
72 void setStatsHelper(std::shared_ptr<StatisticsHelper>
const& helper, std::string
const& stat_key)
74 statsHelperPtr_ = helper;
75 tokens_received_stat_key_ = stat_key;
96 void receiveTokensLoop_();
99 std::shared_ptr<RoutingManagerPolicy> policy_;
100 size_t update_interval_msec_;
102 int token_socket_{-1};
103 std::vector<epoll_event> receive_token_events_;
104 std::unordered_map<int, std::string> receive_token_addrs_;
105 int token_epoll_fd_{-1};
107 boost::thread token_thread_;
108 std::atomic<bool> thread_is_running_;
109 std::atomic<bool> reception_is_paused_;
110 std::atomic<bool> shutdown_requested_;
111 std::atomic<uint32_t> run_number_;
113 std::atomic<size_t> received_token_count_;
114 std::unordered_map<int, size_t> received_token_counter_;
115 std::shared_ptr<StatisticsHelper> statsHelperPtr_;
116 std::string tokens_received_stat_key_;
120 #endif //ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
Configuration of the TokenReceiver. May be used for parameter validation.
fhicl::WrappedTable< Config > Parameters
Used for ParameterSet validation (if desired)
Receives event builder "free buffer" tokens and adds them to a specified RoutingPolicy.
size_t getReceivedTokenCount() const
Returns the number of tokens that have been received.
void stopTokenReception(bool force=false)
Stops the reception of event builder tokens.
void setRunNumber(uint32_t run)
Sets the current run number.
fhicl::Atom< int > routing_token_port
"routing_token_port" (Default: 35555) : Port on which routing tokens will be received ...
TokenReceiver(const fhicl::ParameterSet &ps, std::shared_ptr< RoutingManagerPolicy > policy, size_t update_interval_msec)
TokenReceiver Constructor.
void startTokenReception()
Starts the reception of event builder tokens.
void setStatsHelper(std::shared_ptr< StatisticsHelper > const &helper, std::string const &stat_key)
Specifies a StatisticsHelper instance to use when gathering statistics.
virtual ~TokenReceiver()
TokenReceiver Destructor.
void pauseTokenReception()
Temporarily suspends the reception of event builder tokens.
void resumeTokenReception()
Resumes the reception of event builder tokens after a suspension.