ddt 1.4.0
 
Loading...
Searching...
No Matches
ddtSubscriber.hpp
Go to the documentation of this file.
1
11
12#ifndef DDTSUBSCRIBER_HPP_
13#define DDTSUBSCRIBER_HPP_
14
15#include <cpl.h>
16#undef I
17#undef arg
18
19#include <algorithm>
20#include <boost/algorithm/string.hpp>
21#include <boost/bind/bind.hpp>
22#include <boost/signals2/signal.hpp>
23#include <functional>
24#include <iostream>
25#include <memory>
26#include <string>
27#include <typeinfo>
28#include <vector>
29
36#include "ddt/ddtLogger.hpp"
37#include "ddt/imageBuffer.hpp"
38#include "ddt/imageIO.hpp"
39#include "ddt/initCpl.hpp"
40#include "ddt/ddtInitCodes.hpp"
42
43namespace mal = ::elt::mal;
44namespace datatransfer = ::elt::ddt::datatransfer;
45
46namespace ddt {
47
49 IMAGETRANSFER = 1,
50 OSCILLOSCOPE = 2,
51 MULTIDIM = 3,
54};
55
60 public:
65 boost::signals2::connection connection;
66
67 SignalConnection() = default;
68 explicit SignalConnection(boost::signals2::connection c) : connection(std::move(c)) {}
73 ~SignalConnection() { connection.disconnect(); }
74
76 void disconnect() { connection.disconnect(); }
77
79 bool connected() const { return connection.connected(); }
80 };
81
86
90 ~DdtSubscriber() final;
91
97 ddt::InitCodes Init(int argc, char* argv[]);
98
103 ddt::InitCodes Init(const std::vector<std::string>& args);
104
109 int Run() final;
110
115 int RunTransfer();
116
122 void Stop();
123
130 SignalConnection ConnectNewImage(std::function<void()> callback);
131
132 ::cpl_image* GetCurrentImageCopy();
133 uintptr_t GetCurrentImageCopyAsRawPtr();
134
135 private:
136 ddt::CommandLineParserResult ParseCommandLine(int argc, char* argv[]);
137
138 void ProcessNewData() final;
139 void ProcessNewDataOsc();
140 void ProcessNewDataMultiDim();
141 void PrintStatistics();
142 void DumpAsFile(const std::shared_ptr<DdtEncDec> encDec);
143
144 void CreateNewImageFromDataSample(ddt::DataSample* const sample,
145 const int bytes_per_pixel,
146 const int num_pix_x,
147 const int num_pix_y,
148 const uint32_t data_type);
149 cpl_propertylist* LoadWCSFromMetadata(const std::shared_ptr<DdtEncDec> enc_dec);
150
151 void CleanupTmpImage();
152 void CleanupSharedImage();
153
154 void LogMetaDataBase(DataSample* const data_sample,
155 const std::shared_ptr<DdtEncDec> enc_dec);
156 void LogMetaDataImage2D(DataSample* const data_sample,
157 const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
158 void LogMetaDataImage3D(DataSample* const data_sample,
159 const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
160 void LogMetaDataBinaryxD(DataSample* const data_sample,
161 const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
162 void LogSimulatorStart(const std::string use_case);
163 void LogWcsInfo(std::shared_ptr<DdtEncDec> enc_dec);
164
165 std::vector<std::string> GetDimensions(DataSample* const data_sample);
166
167 std::unique_ptr<DdtDataSubscriber> subscriber;
168
169 std::unique_ptr<DdtLogger> logger;
170
171 bool debug_log_enabled = false;
172 std::string broker_uri;
173 std::string data_stream_identifier;
174 int reading_interval = 10;
175 std::string remote_broker_uri;
176 int mode = 1;
177 bool statistics = false;
178 bool dump_data = false;
179 std::string dump_folder;
180
181 std::atomic<bool> stop_requested{false};
182 std::atomic<bool> processing_active;
183
184 cpl_image* tmp_image = nullptr;
185 bool only_unwrap = false;
186
187 std::mutex new_image_mutex;
188 cpl_image* shared_image = nullptr;
189
190 boost::signals2::signal<void()> new_image_signal;
191
192
193 const int BYTES_STEP = 2;
194};
195
196} // namespace ddt
197
198#endif /* DDTSUBSCRIBER_HPP_ */
Definition ddtEncDecBinaryxD.hpp:39
Definition ddtEncDecImage2D.hpp:48
Definition ddtEncDecImage3D.hpp:45
Definition ddtEncDec.hpp:56
Definition ddtDataSubscriber.hpp:32
Definition ddtLogger.hpp:43
::cpl_image * GetCurrentImageCopy()
Definition ddtSubscriber.cpp:678
void Stop()
Definition ddtSubscriber.cpp:91
ddt::InitCodes Init(int argc, char *argv[])
DdtSubscriber()
Definition ddtSubscriber.cpp:44
int Run() final
Definition ddtSubscriber.cpp:107
SignalConnection ConnectNewImage(std::function< void()> callback)
Definition ddtSubscriber.cpp:652
uintptr_t GetCurrentImageCopyAsRawPtr()
Definition ddtSubscriber.cpp:698
int RunTransfer()
Definition ddtSubscriber.cpp:119
~DdtSubscriber() final
Definition ddtSubscriber.cpp:48
Class for parsing command line arguments. The commandline parser shall parse the required arguments f...
Simulator for receiving data. This is a base class for data subscriber applications.
Data Subscriber. This class provides the functionality for subscriber applications to register / unre...
Factory for DdtDataPublishers and DdtDataSubscribers. This class provides factory methods for creatin...
DDT EncDecMultiDim. Class to encode / decode multi-dimensional array data samples....
DDT EncDecImage2D. Class to encode / decode 2-dimensional data samples containing image data....
DDT EncDecMultiLayer. Class to encode / decode multi-layer image data samples. Class to encode / deco...
Contains return codes for Init() method. This file shall contain return codes that can be used by all...
Class to wrap the usage of log4cplus as logging utility. This file provides a wrapper class for the u...
Image Buffer class, handles internal CPL image. This file is part of the DDT Image Handling Library a...
Image IO function declaration. This file is part of the DDT Image Handling Library and provides funct...
Image IO function declaration. This file is part of the DDT Image Handling Library and provides initi...
Definition ddtClient.hpp:32
SubscriberModes
Definition ddtSubscriber.hpp:48
@ OSCILLOSCOPE
Definition ddtPublisherSimulator.hpp:43
@ MULTIDIM
Definition ddtPublisherSimulator.hpp:44
@ SEGMENTEDIMAGE
Definition ddtPublisherSimulator.hpp:46
@ CONFIGURATIONMAP
Definition ddtPublisherSimulator.hpp:45
@ IMAGETRANSFER
Definition ddtPublisherSimulator.hpp:42
InitCodes
Definition ddtInitCodes.hpp:15
CommandLineParserResult
Definition commandLineParser.hpp:29
Definition ddtMemoryAccessor.hpp:175
Definition ddtSubscriber.hpp:64
~SignalConnection()
Definition ddtSubscriber.hpp:73
SignalConnection(boost::signals2::connection c)
Definition ddtSubscriber.hpp:68
SignalConnection & operator=(const SignalConnection &)=delete
SignalConnection(const SignalConnection &)=delete
void disconnect()
Definition ddtSubscriber.hpp:76
boost::signals2::connection connection
Definition ddtSubscriber.hpp:65
SignalConnection & operator=(SignalConnection &&)=default
bool connected() const
Definition ddtSubscriber.hpp:79
SignalConnection(SignalConnection &&)=default