DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
iomanager
include
iomanager
queue
QueueReceiverModel.hpp
Go to the documentation of this file.
1
8
9
#ifndef IOMANAGER_INCLUDE_IOMANAGER_QUEUE_QUEUERECEIVERMODEL_HPP_
10
#define IOMANAGER_INCLUDE_IOMANAGER_QUEUE_QUEUERECEIVERMODEL_HPP_
11
12
#include "
iomanager/Receiver.hpp
"
13
#include "
iomanager/queue/Queue.hpp
"
14
15
#include "
logging/Logging.hpp
"
16
17
#include <atomic>
18
#include <memory>
19
#include <optional>
20
#include <string>
21
#include <thread>
22
23
namespace
dunedaq::iomanager
{
24
25
// QImpl
26
template
<
typename
Datatype>
27
class
QueueReceiverModel
:
public
ReceiverConcept
<Datatype>
28
{
29
public
:
30
explicit
QueueReceiverModel
(
ConnectionId
const
& request);
31
32
QueueReceiverModel
(
QueueReceiverModel
&& other);
33
34
~QueueReceiverModel
() {
remove_callback
(); }
35
36
Datatype
receive
(
Receiver::timeout_t
timeout)
override
;
37
38
std::optional<Datatype>
try_receive
(
Receiver::timeout_t
timeout)
override
;
39
40
bool
data_pending
()
override
{
return
m_queue
&&
m_queue
->can_pop(); }
41
42
void
add_callback
(std::function<
void
(Datatype&)> callback)
override
;
43
44
void
remove_callback
()
override
;
45
46
// Topics are not used for Queues
47
void
subscribe
(std::string)
override
{}
48
void
unsubscribe
(std::string)
override
{}
49
50
private
:
51
std::function<void(Datatype&)>
m_callback
;
52
std::unique_ptr<std::jthread>
m_event_loop_runner
;
53
std::shared_ptr<Queue<Datatype>>
m_queue
;
54
};
55
56
}
// namespace dunedaq::iomanager
57
58
#include "
detail/QueueReceiverModel.hxx
"
59
60
#endif
// IOMANAGER_INCLUDE_IOMANAGER_QUEUE_QUEUERECEIVERMODEL_HPP_
QueueReceiverModel.hxx
dunedaq::iomanager::QueueReceiverModel::subscribe
void subscribe(std::string) override
Definition
QueueReceiverModel.hpp:47
dunedaq::iomanager::QueueReceiverModel::~QueueReceiverModel
~QueueReceiverModel()
Definition
QueueReceiverModel.hpp:34
dunedaq::iomanager::QueueReceiverModel::remove_callback
void remove_callback() override
Definition
QueueReceiverModel.hxx:118
dunedaq::iomanager::QueueReceiverModel::m_callback
std::function< void(Datatype &)> m_callback
Definition
QueueReceiverModel.hpp:51
dunedaq::iomanager::QueueReceiverModel::QueueReceiverModel
QueueReceiverModel(ConnectionId const &request)
Definition
QueueReceiverModel.hxx:20
dunedaq::iomanager::QueueReceiverModel::m_queue
std::shared_ptr< Queue< Datatype > > m_queue
Definition
QueueReceiverModel.hpp:53
dunedaq::iomanager::QueueReceiverModel::data_pending
bool data_pending() override
Definition
QueueReceiverModel.hpp:40
dunedaq::iomanager::QueueReceiverModel::unsubscribe
void unsubscribe(std::string) override
Definition
QueueReceiverModel.hpp:48
dunedaq::iomanager::QueueReceiverModel::m_event_loop_runner
std::unique_ptr< std::jthread > m_event_loop_runner
Definition
QueueReceiverModel.hpp:52
dunedaq::iomanager::QueueReceiverModel::add_callback
void add_callback(std::function< void(Datatype &)> callback) override
Definition
QueueReceiverModel.hxx:87
dunedaq::iomanager::QueueReceiverModel::try_receive
std::optional< Datatype > try_receive(Receiver::timeout_t timeout) override
Definition
QueueReceiverModel.hxx:64
dunedaq::iomanager::QueueReceiverModel::receive
Datatype receive(Receiver::timeout_t timeout) override
Definition
QueueReceiverModel.hxx:42
dunedaq::iomanager::ReceiverConcept::ReceiverConcept
ReceiverConcept(ConnectionId const &conn_id)
Definition
Receiver.hpp:50
dunedaq::iomanager::Receiver::timeout_t
std::chrono::milliseconds timeout_t
Definition
Receiver.hpp:27
Receiver.hpp
Logging.hpp
dunedaq::iomanager
Definition
IOManager.hxx:19
Queue.hpp
dunedaq::iomanager::ConnectionId
Definition
SchemaUtils.hpp:26
Generated on
for DUNE-DAQ by
1.17.0