Skip to content

Commit 61d01c4

Browse files
authored
Merge pull request #224 from CESNET/unirec++-in-bi-interface-update
Unirec++ - output/bidirectional interface update
2 parents ed158c7 + 87990cf commit 61d01c4

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

unirec/include/unirec++/bidirectionalInterface.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ class UnirecBidirectionalInterface {
202202
uint64_t m_sequenceNumber;
203203
const void* m_prioritizedDataPointer;
204204
bool m_sendEoFonExit;
205+
bool m_isInitialized;
206+
205207
UnirecRecord m_unirecRecord;
206208

207209
friend class Unirec;

unirec/include/unirec++/outputInterface.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class UnirecOutputInterface {
137137
ur_template_t* m_template = nullptr;
138138
uint8_t m_interfaceID;
139139
bool m_sendEoFonExit;
140+
bool m_isInitialized;
140141
UnirecRecord m_unirecRecord;
141142

142143
friend class Unirec;

unirec/unirec++/bidirectionalInterface.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,6 @@
1313

1414
namespace Nemea {
1515

16-
UnirecBidirectionalInterface::~UnirecBidirectionalInterface()
17-
{
18-
if (m_sendEoFonExit) {
19-
sendEoF();
20-
}
21-
22-
ur_free_template(m_template);
23-
}
24-
2516
UnirecBidirectionalInterface::UnirecBidirectionalInterface(
2617
uint8_t inputInterfaceID,
2718
uint8_t outputInterfaceID)
@@ -31,10 +22,20 @@ UnirecBidirectionalInterface::UnirecBidirectionalInterface(
3122
, m_sequenceNumber(0)
3223
, m_prioritizedDataPointer(nullptr)
3324
, m_sendEoFonExit(true)
25+
, m_isInitialized(false)
3426
{
3527
setRequieredFormat("");
3628
}
3729

30+
UnirecBidirectionalInterface::~UnirecBidirectionalInterface()
31+
{
32+
if (m_sendEoFonExit && m_isInitialized) {
33+
sendEoF();
34+
}
35+
36+
ur_free_template(m_template);
37+
}
38+
3839
std::optional<UnirecRecordView> UnirecBidirectionalInterface::receive()
3940
{
4041
const void* receivedData;
@@ -95,6 +96,10 @@ void UnirecBidirectionalInterface::setRequieredFormat(const std::string& templat
9596
"format.");
9697
}
9798

99+
if (templateSpecification.empty()) {
100+
return;
101+
}
102+
98103
changeInternalTemplate(templateSpecification);
99104
}
100105

@@ -120,6 +125,8 @@ void UnirecBidirectionalInterface::changeInternalTemplate(const std::string& tem
120125
}
121126

122127
m_unirecRecord = createUnirecRecord();
128+
129+
m_isInitialized = true;
123130
}
124131

125132
void UnirecBidirectionalInterface::changeTemplate()

unirec/unirec++/outputInterface.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ UnirecOutputInterface::UnirecOutputInterface(uint8_t interfaceID)
1717
: m_template(nullptr)
1818
, m_interfaceID(interfaceID)
1919
, m_sendEoFonExit(true)
20+
, m_isInitialized(false)
2021
{
2122
}
2223

2324
UnirecOutputInterface::~UnirecOutputInterface()
2425
{
25-
if (m_sendEoFonExit) {
26+
if (m_sendEoFonExit && m_isInitialized) {
2627
sendEoF();
2728
}
2829

@@ -88,7 +89,7 @@ void UnirecOutputInterface::setAutoflushTimeout(int timeout)
8889

8990
void UnirecOutputInterface::sendEoF() const
9091
{
91-
char dummy[1] = {0};
92+
char dummy[1] = { 0 };
9293
trap_send(m_interfaceID, dummy, sizeof(dummy));
9394
}
9495

@@ -116,6 +117,8 @@ void UnirecOutputInterface::changeTemplate(const std::string& templateFields)
116117
"created.");
117118
}
118119
m_unirecRecord = createUnirecRecord();
120+
121+
m_isInitialized = true;
119122
}
120123

121124
UnirecRecord UnirecOutputInterface::createUnirecRecord(size_t maxVariableFieldsSize)

0 commit comments

Comments
 (0)