ifw-rtmstools 4.0.0
 
Loading...
Searching...
No Matches
ddtSender.hpp
Go to the documentation of this file.
1
7
8#pragma once
9
10#include <boost/lockfree/spsc_queue.hpp>
11#include <boost/atomic.hpp>
12
13#include <ddt/ddtDataPublisherApplication.hpp>
14#include <ddt/ddtDataPublisher.hpp>
15#include <ddt/ddtDataTransferFactory.hpp>
16#include <ddt/ddtEncDecImage3D.hpp>
17#include <ddt/ddtLogger.hpp>
18
19#include <ifw/fnd/defs/dataType.hpp>
20
21#include <ifw/rtmslib_llnetio/logger.hpp>
25
26 constexpr short QUEUE_SIZE = 5;
27 constexpr short DDT_BUFFER_ITEMS = 2;
28
36 struct DdtSender {
37
38 // Basic image information.
41 ifw::fnd::datatype::DataType m_data_type;
42
43 // Information to connect to the DDT broker.
44 std::string m_broker_uri;
45 std::string m_ddt_stream;
46
47 // Interval to publish images.
49
50 log4cplus::Logger m_logger;
51
52 std::unique_ptr<ddt::DdtDataPublisher> m_publisher;
53 DdtEncDecImage3D m_encoder;
54 std::size_t m_buffer_capacity{0};
55
56 DdtSender(int width,
57 int height,
58 ifw::fnd::datatype::DataType datatype,
59 std::string broker_uri,
60 std::string ddt_stream,
61 int interval = 100);
62
68 void RegisterPublisher();
69
73 void Run();
74
78 void Shutdown();
79
80 public:
81 static std::atomic<bool> new_data; // Flag to notify a new image
82 static std::atomic<bool> stopped; // Flag to stop infinite loop
83
84 // Single-writer/single-reader FIFO queue.
85 static boost::lockfree::spsc_queue<std::shared_ptr<DdtImage>,
86 boost::lockfree::capacity<5>> spsc_queue;
87 };
88}
DdtImage Class Implementation.
Definition ddtImage.cpp:12
constexpr short DDT_BUFFER_ITEMS
Definition ddtSender.hpp:27
constexpr short QUEUE_SIZE
Definition ddtSender.hpp:26
DdtSender(int width, int height, ifw::fnd::datatype::DataType datatype, std::string broker_uri, std::string ddt_stream, int interval=100)
Definition ddtSender.cpp:28
std::string m_ddt_stream
Definition ddtSender.hpp:45
void RegisterPublisher()
Register DDT publisher.
Definition ddtSender.cpp:55
static std::atomic< bool > stopped
Definition ddtSender.hpp:82
int m_interval
Definition ddtSender.hpp:48
log4cplus::Logger m_logger
Definition ddtSender.hpp:50
std::unique_ptr< ddt::DdtDataPublisher > m_publisher
Definition ddtSender.hpp:52
int m_height
Definition ddtSender.hpp:40
static boost::lockfree::spsc_queue< std::shared_ptr< DdtImage >, boost::lockfree::capacity< 5 > > spsc_queue
Definition ddtSender.hpp:86
std::size_t m_buffer_capacity
Definition ddtSender.hpp:54
std::string m_broker_uri
Definition ddtSender.hpp:44
ifw::fnd::datatype::DataType m_data_type
Definition ddtSender.hpp:41
void Run()
Implements infinite loop waiting for new images.
Definition ddtSender.cpp:87
void Shutdown()
Stop publishing and unregister the DDT publisher.
Definition ddtSender.cpp:206
DdtSender(int width, int height, ifw::fnd::datatype::DataType datatype, std::string broker_uri, std::string ddt_stream, int interval=100)
Definition ddtSender.cpp:28
int m_width
Definition ddtSender.hpp:39
static std::atomic< bool > new_data
Definition ddtSender.hpp:81
DdtEncDecImage3D m_encoder
Definition ddtSender.hpp:53