9#include "nlohmann/json.hpp"
21template<
typename Datatype>
26 receiver->add_callback(callback);
29template<
typename Datatype>
30inline std::shared_ptr<ReceiverConcept<Datatype>>
33 auto data_type = datatype_to_string<Datatype>();
36 id.data_type = data_type;
40template<
typename Datatype>
41inline std::shared_ptr<ReceiverConcept<Datatype>>
44 auto data_type = datatype_to_string<Datatype>();
47 id.data_type = data_type;
53template<
typename Datatype>
54inline std::shared_ptr<ReceiverConcept<Datatype>>
57 if (
id.data_type != datatype_to_string<Datatype>()) {
58 throw DatatypeMismatch(
ERS_HERE,
id.uid,
id.data_type, datatype_to_string<Datatype>());
65 static std::mutex dt_receiver_mutex;
66 std::lock_guard<std::mutex> lk(dt_receiver_mutex);
70 TLOG() <<
"Creating QueueReceiverModel for uid " <<
id.uid <<
", datatype " <<
id.data_type;
71 m_receivers[id] = std::make_shared<QueueReceiverModel<Datatype>>(id);
73 TLOG() <<
"Creating NetworkReceiverModel for uid " <<
id.uid <<
", datatype " <<
id.data_type
74 <<
" in session " <<
id.session;
75 m_receivers[id] = std::make_shared<NetworkReceiverModel<Datatype>>(id);
78 return std::dynamic_pointer_cast<ReceiverConcept<Datatype>>(
m_receivers[id]);
81template<
typename Datatype>
82inline std::shared_ptr<SenderConcept<Datatype>>
85 auto data_type = datatype_to_string<Datatype>();
88 id.data_type = data_type;
93template<
typename Datatype>
94inline std::shared_ptr<SenderConcept<Datatype>>
97 if (
id.data_type != datatype_to_string<Datatype>()) {
98 throw DatatypeMismatch(
ERS_HERE,
id.uid,
id.data_type, datatype_to_string<Datatype>());
105 static std::mutex dt_sender_mutex;
106 std::lock_guard<std::mutex> lk(dt_sender_mutex);
110 TLOG() <<
"Creating QueueSenderModel for uid " <<
id.uid <<
", datatype " <<
id.data_type;
111 m_senders[id] = std::make_shared<QueueSenderModel<Datatype>>(id);
113 TLOG() <<
"Creating NetworkSenderModel for uid " <<
id.uid <<
", datatype " <<
id.data_type
114 <<
" in session " <<
id.session;
115 m_senders[id] = std::make_shared<NetworkSenderModel<Datatype>>(id);
118 return std::dynamic_pointer_cast<SenderConcept<Datatype>>(
m_senders[id]);
121template<
typename Datatype>
126 receiver->add_callback(callback);
129template<
typename Datatype>
134 receiver->add_callback(callback);
137template<
typename Datatype>
142 receiver->remove_callback();
145template<
typename Datatype>
150 receiver->remove_callback();
152template<
typename Datatype>
157 receiver->remove_callback();
163[[maybe_unused]]
static std::shared_ptr<iomanager::IOManager>
169template<
typename Datatype>
170static std::shared_ptr<iomanager::SenderConcept<Datatype>>
176template<
typename Datatype>
177static std::shared_ptr<iomanager::ReceiverConcept<Datatype>>
183template<
typename Datatype>
184static std::shared_ptr<iomanager::SenderConcept<Datatype>>
190template<
typename Datatype>
191static std::shared_ptr<iomanager::ReceiverConcept<Datatype>>
static std::shared_ptr< IOManager > get()
void add_callback(ConnectionId const &id, std::function< void(Datatype &)> callback)
std::shared_ptr< SenderConcept< Datatype > > get_sender(ConnectionId id)
void remove_callback(ConnectionId const &id)
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver(ConnectionId id)
static QueueRegistry & get()
Get a handle to the QueueRegistry.
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)
static std::shared_ptr< iomanager::IOManager > get_iomanager()
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)