diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index 3423d16..300023e 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -42,6 +42,7 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index 3423d16..300023e 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -42,6 +42,7 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; quint16 SERVER_PORT; QString BASE_URL; diff --git a/PhaseCompAcq/conf/config.ini b/PhaseCompAcq/conf/config.ini index 05addaa..b0ad4b5 100644 --- a/PhaseCompAcq/conf/config.ini +++ b/PhaseCompAcq/conf/config.ini @@ -4,7 +4,7 @@ [kafka] needKafka=1 brokers="111.198.10.15:20104" -dataTopic="cppTest" +dataTopic="phase-data" statusTopic="dev-status" needSasl=1 saslUsername="admin" @@ -16,6 +16,7 @@ devTypes="02" system="phase" workMode="mock" +master=1 serverPort=5905 [http] diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index 3423d16..300023e 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -42,6 +42,7 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; quint16 SERVER_PORT; QString BASE_URL; diff --git a/PhaseCompAcq/conf/config.ini b/PhaseCompAcq/conf/config.ini index 05addaa..b0ad4b5 100644 --- a/PhaseCompAcq/conf/config.ini +++ b/PhaseCompAcq/conf/config.ini @@ -4,7 +4,7 @@ [kafka] needKafka=1 brokers="111.198.10.15:20104" -dataTopic="cppTest" +dataTopic="phase-data" statusTopic="dev-status" needSasl=1 saslUsername="admin" @@ -16,6 +16,7 @@ devTypes="02" system="phase" workMode="mock" +master=1 serverPort=5905 [http] diff --git a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp index aa4f086..68ed68a 100644 --- a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp +++ b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp @@ -39,12 +39,14 @@ dataObj->channelActive.append("0"); dataObj->channelData.append(0.00); dataObj->channelDataStr.append("0.00"); + dataObj->channelRawDataStr.append(QString::number(CALCULATE_OFFSET)); } else { double phase = (channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR; dataObj->channelActive.append("1"); dataObj->channelData.append(phase); - dataObj->channelDataStr.append(QString::number(phase, 'f', 12)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelRawDataStr.append(QString::number((channelRawData - CALCULATE_OFFSET))); } } diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index 3423d16..300023e 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -42,6 +42,7 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; quint16 SERVER_PORT; QString BASE_URL; diff --git a/PhaseCompAcq/conf/config.ini b/PhaseCompAcq/conf/config.ini index 05addaa..b0ad4b5 100644 --- a/PhaseCompAcq/conf/config.ini +++ b/PhaseCompAcq/conf/config.ini @@ -4,7 +4,7 @@ [kafka] needKafka=1 brokers="111.198.10.15:20104" -dataTopic="cppTest" +dataTopic="phase-data" statusTopic="dev-status" needSasl=1 saslUsername="admin" @@ -16,6 +16,7 @@ devTypes="02" system="phase" workMode="mock" +master=1 serverPort=5905 [http] diff --git a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp index aa4f086..68ed68a 100644 --- a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp +++ b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp @@ -39,12 +39,14 @@ dataObj->channelActive.append("0"); dataObj->channelData.append(0.00); dataObj->channelDataStr.append("0.00"); + dataObj->channelRawDataStr.append(QString::number(CALCULATE_OFFSET)); } else { double phase = (channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR; dataObj->channelActive.append("1"); dataObj->channelData.append(phase); - dataObj->channelDataStr.append(QString::number(phase, 'f', 12)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelRawDataStr.append(QString::number((channelRawData - CALCULATE_OFFSET))); } } diff --git a/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp b/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp index cd39a40..4f0746a 100644 --- a/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp +++ b/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp @@ -11,6 +11,7 @@ QJsonObject dataObj; dataObj.insert("dataValue", this->channelDataStr.at(i)); + dataObj.insert("rawValue", channelRawDataStr.at(i)); dataObj.insert("frameId", this->frameId); jsonObj.insert("channelNo", (i + 1)); diff --git a/CounterAcq/CounterDevice.cpp b/CounterAcq/CounterDevice.cpp index d170054..453cb10 100644 --- a/CounterAcq/CounterDevice.cpp +++ b/CounterAcq/CounterDevice.cpp @@ -121,6 +121,7 @@ { QJsonObject jsonObj = counterData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -132,6 +133,7 @@ QJsonObject statusObj = counterData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + statusObj.insert("master", SettingConfig::getInstance().MASTER); statusObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/CounterAcq/CounterWindow.cpp b/CounterAcq/CounterWindow.cpp index 6cb124c..35c5ac8 100644 --- a/CounterAcq/CounterWindow.cpp +++ b/CounterAcq/CounterWindow.cpp @@ -86,6 +86,8 @@ // 6. 绘制一个设备的多个通道数据面板 this->generateWidgetForDevice(); + + HttpServer::instance().run(QHostAddress::Any, SettingConfig::getInstance().SERVER_PORT); } CounterWindow::~CounterWindow() diff --git a/CounterAcq/CounterWindow.h b/CounterAcq/CounterWindow.h index 09277ba..084bb06 100644 --- a/CounterAcq/CounterWindow.h +++ b/CounterAcq/CounterWindow.h @@ -8,6 +8,7 @@ #include "common/utils/SettingConfig.h" #include "common/HttpRequestController.h" +#include "common/HttpServer.h" #include "CounterDevice.h" namespace Ui { diff --git a/CounterAcq/common/HttpServer.cpp b/CounterAcq/common/HttpServer.cpp new file mode 100644 index 0000000..c1a1b48 --- /dev/null +++ b/CounterAcq/common/HttpServer.cpp @@ -0,0 +1,68 @@ +#include "HttpServer.h" + +HttpServer::HttpServer(QObject *parent) : QObject(parent) +{ + httpServer = new QTcpServer(this); + httpServer->setMaxPendingConnections(1024); + QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); +} + +HttpServer::~HttpServer() +{ + +} + +HttpServer &HttpServer::instance() +{ + static HttpServer obj; + return obj; +} + +void HttpServer::run(const QHostAddress &address, const quint16 &port) +{ + httpServer->listen(address, port); +} + +void HttpServer::newConnection() +{ + QTcpSocket * m_socket = httpServer->nextPendingConnection(); + QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); +} + +void HttpServer::readyRead() +{ + QTcpSocket * socket = qobject_cast(sender()); + if(socket) { + QByteArray request = socket->readAll(); + + qDebug() << "Request Data:" << request; + + QByteArray response = this->buildHeartBeatResponse().toUtf8(); + + QString http = "HTTP/1.1 200 OK\r\n"; + http += "Server: qt\r\n"; + http += "Content-Type: application/json;charset=utf-8\r\n"; + http += "Connection: keep-alive\r\n"; + http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); + + socket->write(http.toUtf8()); + socket->write(response); + socket->flush(); + socket->waitForBytesWritten(http.size() + response.size()); + socket->close(); + } +} + +QString HttpServer::buildHeartBeatResponse() +{ + QJsonObject resp; + resp.insert("code", 200); + resp.insert("success", true); + + QJsonObject data; + data.insert("status", "1"); + data.insert("remarks", ""); + resp.insert("data", data); + + return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); +} diff --git a/CounterAcq/common/HttpServer.h b/CounterAcq/common/HttpServer.h new file mode 100644 index 0000000..7499987 --- /dev/null +++ b/CounterAcq/common/HttpServer.h @@ -0,0 +1,33 @@ +#ifndef HTTPSERVER_H +#define HTTPSERVER_H + +#include +#include +#include +#include + +class HttpServer : public QObject +{ + Q_OBJECT +public: + static HttpServer &instance(); + void run(const QHostAddress &address = QHostAddress::Any, const quint16 &port = 5905); + +private: + explicit HttpServer(QObject *parent = nullptr); + ~HttpServer(); + Q_DISABLE_COPY(HttpServer) + + QTcpServer * httpServer; + + QString buildHeartBeatResponse(); + +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // HTTPSERVER_H diff --git a/CounterAcq/common/common.pri b/CounterAcq/common/common.pri index 6280f64..b80a640 100644 --- a/CounterAcq/common/common.pri +++ b/CounterAcq/common/common.pri @@ -7,6 +7,7 @@ SOURCES += $$PWD/utils/HttpRequestUtil.cpp SOURCES += $$PWD/utils/MD5.cpp SOURCES += $$PWD/HttpRequestController.cpp +SOURCES += $$PWD/HttpServer.cpp HEADERS += $$PWD/utils/SettingConfig.h HEADERS += $$PWD/utils/QByteUtil.h @@ -17,4 +18,5 @@ HEADERS += $$PWD/utils/DefHead.h HEADERS += $$PWD/utils/MD5.h HEADERS += $$PWD/HttpRequestController.h +HEADERS += $$PWD/HttpServer.h HEADERS += $$PWD/ConstCache.h diff --git a/CounterAcq/common/utils/SettingConfig.cpp b/CounterAcq/common/utils/SettingConfig.cpp index 6273b6d..41a155c 100644 --- a/CounterAcq/common/utils/SettingConfig.cpp +++ b/CounterAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,8 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); + SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/CounterAcq/common/utils/SettingConfig.h b/CounterAcq/common/utils/SettingConfig.h index 6add4de..300023e 100644 --- a/CounterAcq/common/utils/SettingConfig.h +++ b/CounterAcq/common/utils/SettingConfig.h @@ -42,6 +42,8 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; + quint16 SERVER_PORT; QString BASE_URL; diff --git a/CounterAcq/conf/config.ini b/CounterAcq/conf/config.ini index 5758931..c2370ca 100644 --- a/CounterAcq/conf/config.ini +++ b/CounterAcq/conf/config.ini @@ -16,6 +16,8 @@ devTypes="01" system="clock" workMode="mock" +master=1 +serverPort=5905 [http] baseUrl="http://111.198.10.15:11410" diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 493f1f4..1f943be 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -46,7 +46,12 @@ void PhaseDevice::initSerialPort() { - this->serialUtil.openSerialPort(this->comName, this->baudRate); + QStringList comNameList = this->comName.split(","); + this->serialUtil.openSerialPort(comNameList.at(0), this->baudRate); + if (comNameList.size() == 2) + { + this->serialUtilB.openSerialPort(comNameList.at(1), this->baudRate); + } } void PhaseDevice::startWork() @@ -132,6 +137,7 @@ { QJsonObject jsonObj = phaseData->toJSON(i - 1); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); + jsonObj.insert("master", SettingConfig::getInstance().MASTER); jsonObj.insert("deviceId", deviceId); kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } @@ -144,5 +150,6 @@ QJsonObject statusObj = phaseData->toStatusJSON(); statusObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); statusObj.insert("deviceId", deviceId); + statusObj.insert("master", SettingConfig::getInstance().MASTER); kafkaUtil.produceMessage(SettingConfig::getInstance().KAFKA_STATUS_TOPIC, QString(QJsonDocument(statusObj).toJson(QJsonDocument::Compact))); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 887ed10..3cc57a3 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -35,6 +35,7 @@ int baudRate; QSerialPortUtil serialUtil; + QSerialPortUtil serialUtilB; QKafkaUtil kafkaUtil; QByteArray dataBuff; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index e984099..41a155c 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -20,6 +20,7 @@ DEV_TYPES = getProperty("client", "devTypes").toString(); SYSTEM = getProperty("client", "system").toString(); WORK_TYPE = getProperty("client", "workMode").toString(); + MASTER = getProperty("client", "master").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index 3423d16..300023e 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -42,6 +42,7 @@ QString DEV_TYPES; QString SYSTEM; QString WORK_TYPE; + int MASTER; quint16 SERVER_PORT; QString BASE_URL; diff --git a/PhaseCompAcq/conf/config.ini b/PhaseCompAcq/conf/config.ini index 05addaa..b0ad4b5 100644 --- a/PhaseCompAcq/conf/config.ini +++ b/PhaseCompAcq/conf/config.ini @@ -4,7 +4,7 @@ [kafka] needKafka=1 brokers="111.198.10.15:20104" -dataTopic="cppTest" +dataTopic="phase-data" statusTopic="dev-status" needSasl=1 saslUsername="admin" @@ -16,6 +16,7 @@ devTypes="02" system="phase" workMode="mock" +master=1 serverPort=5905 [http] diff --git a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp index aa4f086..68ed68a 100644 --- a/PhaseCompAcq/protocol/PhaseProtocolBM.cpp +++ b/PhaseCompAcq/protocol/PhaseProtocolBM.cpp @@ -39,12 +39,14 @@ dataObj->channelActive.append("0"); dataObj->channelData.append(0.00); dataObj->channelDataStr.append("0.00"); + dataObj->channelRawDataStr.append(QString::number(CALCULATE_OFFSET)); } else { double phase = (channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR; dataObj->channelActive.append("1"); dataObj->channelData.append(phase); - dataObj->channelDataStr.append(QString::number(phase, 'f', 12)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelRawDataStr.append(QString::number((channelRawData - CALCULATE_OFFSET))); } } diff --git a/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp b/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp index cd39a40..4f0746a 100644 --- a/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp +++ b/PhaseCompAcq/protocol/dto/PhaseDataDto.cpp @@ -11,6 +11,7 @@ QJsonObject dataObj; dataObj.insert("dataValue", this->channelDataStr.at(i)); + dataObj.insert("rawValue", channelRawDataStr.at(i)); dataObj.insert("frameId", this->frameId); jsonObj.insert("channelNo", (i + 1)); diff --git a/PhaseCompAcq/protocol/dto/PhaseDataDto.h b/PhaseCompAcq/protocol/dto/PhaseDataDto.h index 3d34384..fd2647d 100644 --- a/PhaseCompAcq/protocol/dto/PhaseDataDto.h +++ b/PhaseCompAcq/protocol/dto/PhaseDataDto.h @@ -21,6 +21,7 @@ QString devStatus; QList channelActive; QList channelData; + QList channelRawDataStr; QList channelDataStr; QJsonObject toJSON(int i);