BmnRoot
Loading...
Searching...
No Matches
BmnOnlineSource.h
Go to the documentation of this file.
1#ifndef BMN_ONLINE_SOURCE_H
2#define BMN_ONLINE_SOURCE_H
3
4#include <FairOnlineSource.h>
5#include <TClonesArray.h>
6#include <TMessage.h>
7#include <TString.h>
8#include <TTree.h>
9#include <zmq.h>
10
11class _CustomTMessage : public TMessage {
12 public:
13 _CustomTMessage(void* buf, Int_t len) : TMessage(buf, len) {
14 ResetBit(kIsOwner);
15 }
16};
17
18class BmnOnlineSource : public FairOnlineSource {
19 public:
20 BmnOnlineSource(TString endpoint = "tcp://localhost:5555");
21 virtual ~BmnOnlineSource();
22
23 virtual Bool_t Init();
24 virtual Int_t ReadEvent(UInt_t = 0);
25 virtual void Close();
26
29
30 template <typename T>
31 static void DeserializeZmqMessage(zmq_msg_t* zmq_message,
32 std::unique_ptr<T>& output) {
33 _CustomTMessage _message(zmq_msg_data(zmq_message),
34 zmq_msg_size(zmq_message));
35
36 output.reset(
37 static_cast<T*>(_message.ReadObjectAny(_message.GetClass())));
38 };
39
40 protected:
41 TString fEndpoint;
42
43 std::shared_ptr<void> fZmqContext;
44 std::shared_ptr<void> fZmqSubSocket;
45
46 std::unordered_map<std::string, std::unique_ptr<TClonesArray>>
48
49 void RegisterBranches(std::unique_ptr<TTree>& tree);
50 void UploadDataToRegisteredBranches(std::unique_ptr<TTree>& tree);
51
52 private:
53 Bool_t fAreBranchesRegistered;
54
55 ClassDef(BmnOnlineSource, 0)
56};
57
58#endif // BMN_ONLINE_SOURCE_H
std::shared_ptr< void > fZmqContext
static void DeserializeZmqMessage(zmq_msg_t *zmq_message, std::unique_ptr< T > &output)
std::shared_ptr< void > fZmqSubSocket
virtual Int_t ReadEvent(UInt_t=0)
std::unordered_map< std::string, std::unique_ptr< TClonesArray > > fRegisteredBranches
BmnOnlineSource & operator=(const BmnOnlineSource &)=delete
void RegisterBranches(std::unique_ptr< TTree > &tree)
void UploadDataToRegisteredBranches(std::unique_ptr< TTree > &tree)
BmnOnlineSource(const BmnOnlineSource &)=delete
virtual ~BmnOnlineSource()
virtual Bool_t Init()
virtual void Close()
_CustomTMessage(void *buf, Int_t len)