BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
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
12{
13 public:
14 _CustomTMessage(void* buf, Int_t len)
15 : TMessage(buf, len)
16 {
18 }
19};
20
22{
23 public:
24 BmnOnlineSource(TString endpoint = "tcp://localhost:5555");
25 virtual ~BmnOnlineSource();
26
27 virtual Bool_t Init();
28 virtual Int_t ReadEvent(UInt_t = 0);
29 virtual void Close();
30
33
34 template<typename T>
35 static void DeserializeZmqMessage(zmq_msg_t* zmq_message, std::unique_ptr<T>& output)
36 {
37 _CustomTMessage _message(zmq_msg_data(zmq_message), zmq_msg_size(zmq_message));
38
39 output.reset(static_cast<T*>(_message.ReadObjectAny(_message.GetClass())));
40 };
41
42 protected:
44
45 std::shared_ptr<void> fZmqContext;
46 std::shared_ptr<void> fZmqSubSocket;
47
48 std::unordered_map<std::string, std::unique_ptr<TClonesArray>> fRegisteredBranches;
49
50 void RegisterBranches(std::unique_ptr<TTree>& tree);
51 void UploadDataToRegisteredBranches(std::unique_ptr<TTree>& tree);
52
53 private:
55
57};
58
59#endif // BMN_ONLINE_SOURCE_H
bool Bool_t
int Int_t
unsigned int UInt_t
#define ClassDef(name, id)
std::shared_ptr< void > fZmqContext
static void DeserializeZmqMessage(zmq_msg_t *zmq_message, std::unique_ptr< T > &output)
Bool_t fAreBranchesRegistered
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()
BmnOnlineSource(TString endpoint="tcp://localhost:5555")
virtual void Close()
void * ReadObjectAny(const TClass *cast) override
TMessage(UInt_t what=kMESS_ANY, Int_t bufsize=TBuffer::kInitialSize)
TClass * GetClass() const
void ResetBit(UInt_t f)
_CustomTMessage(void *buf, Int_t len)