diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h
index 2d68710..8f752a0 100644
--- a/CounterAcq/common/utils/SettingConfig.h
+++ b/CounterAcq/common/utils/SettingConfig.h
@@ -31,6 +31,11 @@
int BAUD_RATE;
QString DEV_CODES;
+ QString KAFKA_BROKERS;
+ QString KAFKA_DATA_TOPIC;
+
+ QString CLIENT_ID;
+
private:
SettingConfig();
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h
index 2d68710..8f752a0 100644
--- a/CounterAcq/common/utils/SettingConfig.h
+++ b/CounterAcq/common/utils/SettingConfig.h
@@ -31,6 +31,11 @@
int BAUD_RATE;
QString DEV_CODES;
+ QString KAFKA_BROKERS;
+ QString KAFKA_DATA_TOPIC;
+
+ QString CLIENT_ID;
+
private:
SettingConfig();
diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini
new file mode 100644
index 0000000..1430594
--- /dev/null
+++ b/CounterAcq/conf/config.ini
@@ -0,0 +1,11 @@
+[com]
+portNames="COM1,COM2,COM3"
+devCodes="9101,9102,9103"
+baudRate=115200
+
+[kafka]
+brokers="111.198.10.15:12502"
+dataTopic="clock-data"
+
+[client]
+clientId="112233445566"
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h
index 2d68710..8f752a0 100644
--- a/CounterAcq/common/utils/SettingConfig.h
+++ b/CounterAcq/common/utils/SettingConfig.h
@@ -31,6 +31,11 @@
int BAUD_RATE;
QString DEV_CODES;
+ QString KAFKA_BROKERS;
+ QString KAFKA_DATA_TOPIC;
+
+ QString CLIENT_ID;
+
private:
SettingConfig();
diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini
new file mode 100644
index 0000000..1430594
--- /dev/null
+++ b/CounterAcq/conf/config.ini
@@ -0,0 +1,11 @@
+[com]
+portNames="COM1,COM2,COM3"
+devCodes="9101,9102,9103"
+baudRate=115200
+
+[kafka]
+brokers="111.198.10.15:12502"
+dataTopic="clock-data"
+
+[client]
+clientId="112233445566"
diff --git a/CounterAcq/protocol/dto/CounterDataDto.cpp b/CounterAcq/protocol/dto/CounterDataDto.cpp
index 3ceb810..c86988a 100644
--- a/CounterAcq/protocol/dto/CounterDataDto.cpp
+++ b/CounterAcq/protocol/dto/CounterDataDto.cpp
@@ -1,6 +1,23 @@
#include "CounterDataDto.h"
+#include "common/utils/SettingConfig.h"
CounterDataDto::CounterDataDto(QObject *parent) : QObject(parent)
{
}
+
+QJsonObject CounterDataDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("channelRefNo", this->channelRefId);
+ dataObj.insert("dataValue", this->channelData);
+ dataObj.insert("frameId", this->frameId);
+
+ jsonObj.insert("channelNo", this->channelId);
+ jsonObj.insert("js", this->milisecond);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h
index 2d68710..8f752a0 100644
--- a/CounterAcq/common/utils/SettingConfig.h
+++ b/CounterAcq/common/utils/SettingConfig.h
@@ -31,6 +31,11 @@
int BAUD_RATE;
QString DEV_CODES;
+ QString KAFKA_BROKERS;
+ QString KAFKA_DATA_TOPIC;
+
+ QString CLIENT_ID;
+
private:
SettingConfig();
diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini
new file mode 100644
index 0000000..1430594
--- /dev/null
+++ b/CounterAcq/conf/config.ini
@@ -0,0 +1,11 @@
+[com]
+portNames="COM1,COM2,COM3"
+devCodes="9101,9102,9103"
+baudRate=115200
+
+[kafka]
+brokers="111.198.10.15:12502"
+dataTopic="clock-data"
+
+[client]
+clientId="112233445566"
diff --git a/CounterAcq/protocol/dto/CounterDataDto.cpp b/CounterAcq/protocol/dto/CounterDataDto.cpp
index 3ceb810..c86988a 100644
--- a/CounterAcq/protocol/dto/CounterDataDto.cpp
+++ b/CounterAcq/protocol/dto/CounterDataDto.cpp
@@ -1,6 +1,23 @@
#include "CounterDataDto.h"
+#include "common/utils/SettingConfig.h"
CounterDataDto::CounterDataDto(QObject *parent) : QObject(parent)
{
}
+
+QJsonObject CounterDataDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("channelRefNo", this->channelRefId);
+ dataObj.insert("dataValue", this->channelData);
+ dataObj.insert("frameId", this->frameId);
+
+ jsonObj.insert("channelNo", this->channelId);
+ jsonObj.insert("js", this->milisecond);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/CounterAcq/protocol/dto/CounterDataDto.h b/CounterAcq/protocol/dto/CounterDataDto.h
index 96dd4c0..3008f48 100644
--- a/CounterAcq/protocol/dto/CounterDataDto.h
+++ b/CounterAcq/protocol/dto/CounterDataDto.h
@@ -2,6 +2,8 @@
#define COUNTERDATADTO_H
#include
+#include
+#include
class CounterDataDto : public QObject
{
@@ -12,7 +14,7 @@
QString frameId; // 帧ID -- <8>
double level; // 触发电平浮点数 -- <7>
QString load; // 负载(0=50欧姆,1=1M欧姆) -- <6>
- qulonglong channelData; // 通道测量数据,单位:10ps -- <5>
+ qlonglong channelData; // 通道测量数据,单位:10ps -- <5>
qint8 channelRefId; // 参考通道号 -- <4>
qint8 channelActive; // 通道有效标志 -- <3>
qint8 channelId; // 测量通道号 -- <2>
@@ -21,10 +23,12 @@
QByteArray rawFrame; // 原始帧字节数组
QString timestamp; // 时间戳字符串
- qulonglong milisecond; // 毫秒计数
+ qlonglong milisecond; // 毫秒计数
QString devCode;
QString devStatus;
+ QJsonObject toJSON();
+
signals:
};
diff --git a/CounterAcq/CounterAcq.pro b/CounterAcq/CounterAcq.pro
index 061f942..1011525 100644
--- a/CounterAcq/CounterAcq.pro
+++ b/CounterAcq/CounterAcq.pro
@@ -21,7 +21,14 @@
SOURCES += CounterDevice.cpp
+DISTFILES += conf/config.ini
+
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+unix:!macx: LIBS += -L$$PWD/lib/librdkafka/ -lrdkafka -lrdkafka++
+
+INCLUDEPATH += $$PWD/include/librdkafka
+DEPENDPATH += $$PWD/include/librdkafka
diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp
index bc94305..4bad032 100644
--- a/CounterAcq/CounterWindow.cpp
+++ b/CounterAcq/CounterWindow.cpp
@@ -38,3 +38,8 @@
{
delete ui;
}
+
+void CounterWindow::on_pushButton_clicked()
+{
+ qlonglong deviceId = 9101;
+}
diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h
index 8bae180..c0f439d 100644
--- a/CounterAcq/CounterWindow.h
+++ b/CounterAcq/CounterWindow.h
@@ -17,6 +17,9 @@
explicit CounterWindow(QWidget *parent = nullptr);
~CounterWindow();
+private slots:
+ void on_pushButton_clicked();
+
private:
Ui::CounterWindow *ui;
};
diff --git a/CounterAcq/CounterWindow.ui b/CounterAcq/CounterWindow.ui
index 0b19cdd..60a7bac 100644
--- a/CounterAcq/CounterWindow.ui
+++ b/CounterAcq/CounterWindow.ui
@@ -1,7 +1,5 @@
+
-
-
-
CounterWindow
@@ -15,7 +13,20 @@
Form
+
+
+
+ 100
+ 120
+ 181
+ 51
+
+
+
+ Mock ClockDiff Data
+
+
-
+
diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri
index cbcd7e5..055a2db 100644
--- a/CounterAcq/common/common.pri
+++ b/CounterAcq/common/common.pri
@@ -3,8 +3,10 @@
SOURCES += $$PWD/utils/QByteUtil.cpp
SOURCES += $$PWD/utils/QSerialPortUtil.cpp
SOURCES += $$PWD/utils/QLogUtil.cpp
+SOURCES += $$PWD/utils/QKafkaUtil.cpp
HEADERS += $$PWD/utils/SettingConfig.h
HEADERS += $$PWD/utils/QByteUtil.h
HEADERS += $$PWD/utils/QSerialPortUtil.h
HEADERS += $$PWD/utils/QLogUtil.h
+HEADERS += $$PWD/utils/QKafkaUtil.h
diff --git a/CounterAcq/common/utils/QKafkaUtil.cpp b/CounterAcq/common/utils/QKafkaUtil.cpp
new file mode 100644
index 0000000..3f00452
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.cpp
@@ -0,0 +1,59 @@
+#include "QKafkaUtil.h"
+#include
+
+QKafkaUtil::QKafkaUtil(QObject *parent) : QObject(parent)
+{
+ this->conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
+}
+
+void QKafkaUtil::setBrokers(QString brokers)
+{
+ this->brokers = brokers;
+}
+void QKafkaUtil::setTopic(QString topic)
+{
+ this->topic = topic;
+}
+
+
+int QKafkaUtil::createProducer()
+{
+ int result;
+ result = this->conf->set("bootstrap.servers", this->brokers.toStdString(), errStr);
+
+ if (result != RdKafka::Conf::CONF_OK)
+ {
+ std::cerr << errStr << std::endl;
+
+ return RdKafka::Conf::CONF_INVALID; // -1
+ }
+
+ this->producer = RdKafka::Producer::create(this->conf, errStr);
+ if (producer == 0)
+ {
+ std::cerr << "Failed to create producer: " << errStr << std::endl;
+ return -2;
+ }
+
+ result = 1;
+ return result;
+}
+
+int QKafkaUtil::produceMessage(QString message)
+{
+ auto retCode = producer->produce(topic.toStdString(), RdKafka::Topic::PARTITION_UA, RdKafka::Producer::RK_MSG_COPY,
+ const_cast(message.toStdString().c_str()), message.size(),
+ nullptr, 0, 0, nullptr, nullptr);
+
+ if (retCode != RdKafka::ERR_NO_ERROR)
+ {
+ std::cerr << "Failed to produce to topic " << topic.toStdString() << ": " <<
+ RdKafka::err2str(retCode) << std::endl;
+ } else
+ {
+ std::cerr << "Enqueued message (" << message.size() << " bytes) " <<
+ "for topic " << topic.toStdString() << "[" << message.toStdString() <<"]" << std::endl;
+ }
+
+ return retCode;
+}
diff --git a/CounterAcq/common/utils/QKafkaUtil.h b/CounterAcq/common/utils/QKafkaUtil.h
new file mode 100644
index 0000000..289ea6f
--- /dev/null
+++ b/CounterAcq/common/utils/QKafkaUtil.h
@@ -0,0 +1,33 @@
+#ifndef QKAFKAUTIL_H
+#define QKAFKAUTIL_H
+
+#include
+
+#include "include/librdkafka/rdkafkacpp.h"
+
+class QKafkaUtil : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QKafkaUtil(QObject *parent = nullptr);
+
+ void setBrokers(QString brokers);
+ void setTopic(QString topic);
+
+ int createProducer();
+ int produceMessage(QString message);
+
+private:
+ QString brokers;
+ QString topic;
+
+ std::string errStr;
+
+ RdKafka::Conf * conf;
+
+ RdKafka::Producer * producer = 0;
+signals:
+
+};
+
+#endif // QKAFKAUTIL_H
diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp
index ef037c9..0c9d89d 100644
--- a/CounterAcq/common/utils/SettingConfig.cpp
+++ b/CounterAcq/common/utils/SettingConfig.cpp
@@ -8,6 +8,11 @@
PORT_NAMES = getProperty("com", "portNames").toString();
BAUD_RATE = getProperty("com", "baudRate").toUInt();
DEV_CODES = getProperty("com", "devCodes").toString();
+
+ KAFKA_BROKERS = getProperty("kafka", "brokers").toString();
+ KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString();
+
+ CLIENT_ID = getProperty("client", "clientId").toString();
}
diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h
index 2d68710..8f752a0 100644
--- a/CounterAcq/common/utils/SettingConfig.h
+++ b/CounterAcq/common/utils/SettingConfig.h
@@ -31,6 +31,11 @@
int BAUD_RATE;
QString DEV_CODES;
+ QString KAFKA_BROKERS;
+ QString KAFKA_DATA_TOPIC;
+
+ QString CLIENT_ID;
+
private:
SettingConfig();
diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini
new file mode 100644
index 0000000..1430594
--- /dev/null
+++ b/CounterAcq/conf/config.ini
@@ -0,0 +1,11 @@
+[com]
+portNames="COM1,COM2,COM3"
+devCodes="9101,9102,9103"
+baudRate=115200
+
+[kafka]
+brokers="111.198.10.15:12502"
+dataTopic="clock-data"
+
+[client]
+clientId="112233445566"
diff --git a/CounterAcq/protocol/dto/CounterDataDto.cpp b/CounterAcq/protocol/dto/CounterDataDto.cpp
index 3ceb810..c86988a 100644
--- a/CounterAcq/protocol/dto/CounterDataDto.cpp
+++ b/CounterAcq/protocol/dto/CounterDataDto.cpp
@@ -1,6 +1,23 @@
#include "CounterDataDto.h"
+#include "common/utils/SettingConfig.h"
CounterDataDto::CounterDataDto(QObject *parent) : QObject(parent)
{
}
+
+QJsonObject CounterDataDto::toJSON()
+{
+ QJsonObject jsonObj;
+
+ QJsonObject dataObj;
+ dataObj.insert("channelRefNo", this->channelRefId);
+ dataObj.insert("dataValue", this->channelData);
+ dataObj.insert("frameId", this->frameId);
+
+ jsonObj.insert("channelNo", this->channelId);
+ jsonObj.insert("js", this->milisecond);
+ jsonObj.insert("data", dataObj);
+
+ return jsonObj;
+}
diff --git a/CounterAcq/protocol/dto/CounterDataDto.h b/CounterAcq/protocol/dto/CounterDataDto.h
index 96dd4c0..3008f48 100644
--- a/CounterAcq/protocol/dto/CounterDataDto.h
+++ b/CounterAcq/protocol/dto/CounterDataDto.h
@@ -2,6 +2,8 @@
#define COUNTERDATADTO_H
#include
+#include
+#include
class CounterDataDto : public QObject
{
@@ -12,7 +14,7 @@
QString frameId; // 帧ID -- <8>
double level; // 触发电平浮点数 -- <7>
QString load; // 负载(0=50欧姆,1=1M欧姆) -- <6>
- qulonglong channelData; // 通道测量数据,单位:10ps -- <5>
+ qlonglong channelData; // 通道测量数据,单位:10ps -- <5>
qint8 channelRefId; // 参考通道号 -- <4>
qint8 channelActive; // 通道有效标志 -- <3>
qint8 channelId; // 测量通道号 -- <2>
@@ -21,10 +23,12 @@
QByteArray rawFrame; // 原始帧字节数组
QString timestamp; // 时间戳字符串
- qulonglong milisecond; // 毫秒计数
+ qlonglong milisecond; // 毫秒计数
QString devCode;
QString devStatus;
+ QJsonObject toJSON();
+
signals:
};
diff --git a/ZXSSCJ.pro b/ZXSSCJ.pro
index f1c0807..87b1bd3 100644
--- a/ZXSSCJ.pro
+++ b/ZXSSCJ.pro
@@ -5,5 +5,5 @@
SUBDIRS += CounterAcq #计数器数据采集
SUBDIRS += PhaseCompAcq #比相仪数据采集
-SUBDIRS += DevStatusAcq
+#SUBDIRS += DevStatusAcq
#SUBDIRS += HClockAcq #氢钟状态数据采集