diff --git a/src/MeasureDeviceController.cpp b/src/MeasureDeviceController.cpp index 2a9ff1b..3840551 100644 --- a/src/MeasureDeviceController.cpp +++ b/src/MeasureDeviceController.cpp @@ -10,12 +10,12 @@ typedef int* DeviceHandler; static sDeviceList s_device_list; static DeviceHandler GetDeviceHandler(const QString &device_guid) { - DeviceHandler device_handler = nullptr; + DeviceHandler device_handler = DeviceHandler(0x01); for (int i = 0; i < s_device_list.totalNum; i++) { sDeviceInfo di; int ret = GetDeviceInfo(s_device_list.pHandle[i], &di,-1,-1); if (ret == 0) { - if (QString(di.GUID) == device_guid) { + if (QString(di.MacAddr) == device_guid) { device_handler = s_device_list.pHandle[i]; } } else { @@ -43,7 +43,6 @@ MeasureDeviceController *MeasureDeviceController::Instance() MeasureDeviceController::~MeasureDeviceController() { - } void MeasureDeviceController::InitFindMeasureDevice() @@ -69,6 +68,8 @@ void MeasureDeviceController::onFindDeviceFinishedCallback(int ret, sDeviceList* if ( s_device_list.totalNum == 0 ) { init_ok &= false; QLOG_WARN() << QStringLiteral(u"未找到测量设备!"); + } else { + QLOG_DEBUG() << s_device_list.totalNum << GetMeasureDeviceList(); } } else { init_ok &= false; @@ -87,9 +88,9 @@ QStringList MeasureDeviceController::GetMeasureDeviceList() QStringList device_guid_list; for (int i = 0; i < s_device_list.totalNum; i++) { sDeviceInfo di; - int ret = GetDeviceInfo(s_device_list.pHandle[i], &di,-1,-1); + int ret = GetDeviceInfo(s_device_list.pHandle[i], &di, 0, 1); if (ret == 0) { - device_guid_list.append(QString(di.GUID)); + device_guid_list.append(QString(di.MacAddr)); } else { QLOG_ERROR() << QStringLiteral(u"处理查找测量设备结果信息失败: GetDeviceInfo调用失败索引%1,[返回代码%2]").arg(i).arg(ret); } diff --git a/src/MeasureServer.cpp b/src/MeasureServer.cpp index 7c4105f..555d3b0 100644 --- a/src/MeasureServer.cpp +++ b/src/MeasureServer.cpp @@ -1,5 +1,6 @@ #include "MeasureServer.h" #include "MeasureTask.h" +#include "QsLogManage.h" MeasureServer::MeasureServer(QObject *parent) : QTcpServer(parent) @@ -8,7 +9,7 @@ MeasureServer::MeasureServer(QObject *parent) bool MeasureServer::Start(quint16 port) { - return this->listen(QHostAddress::Any, port); + return this->listen(QHostAddress::LocalHost, port); } void MeasureServer::Stop() @@ -18,8 +19,9 @@ void MeasureServer::Stop() void MeasureServer::incomingConnection(qintptr socketDescriptor) { - MeasureTask * measure_thread = new MeasureTask(socketDescriptor); + QLOG_INFO() << QStringLiteral(u"接收到新的请求连接") << socketDescriptor; + MeasureTask * measure_thread = new MeasureTask(socketDescriptor, this); connect(measure_thread, &MeasureTask::finished, measure_thread, &MeasureTask::deleteLater); - _measure_thread->start(); + measure_thread->start(); } diff --git a/src/MeasureServer.h b/src/MeasureServer.h index 8e74fe2..f99dcbf 100644 --- a/src/MeasureServer.h +++ b/src/MeasureServer.h @@ -12,14 +12,11 @@ class MeasureServer : public QTcpServer public: MeasureServer(QObject *parent = nullptr); - bool Start(quint16 port = 96966); + bool Start(quint16 port = 9999); void Stop(); protected: void incomingConnection(qintptr socketDescriptor) override; - -private: - MeasureTask* _measure_thread = nullptr; }; diff --git a/src/MeasureTask.cpp b/src/MeasureTask.cpp index 5f39783..5b26ee3 100644 --- a/src/MeasureTask.cpp +++ b/src/MeasureTask.cpp @@ -5,7 +5,9 @@ #include #include #include - +#include "QsLogManage.h" +#include +#include MeasureTask::MeasureTask(int socketDescriptor, QObject *parent) : QThread(parent), socketDescriptor(socketDescriptor) @@ -17,44 +19,52 @@ void MeasureTask::run() QTcpSocket tcp_socket; if (!tcp_socket.setSocketDescriptor(socketDescriptor)) { emit errorOccurred(tcp_socket.errorString()); + QLOG_DEBUG() << tcp_socket.errorString(); return; } - QByteArray buffer; - while (tcp_socket.waitForReadyRead(500)) { - buffer.append(tcp_socket.readAll()); - } + tcp_socket.waitForReadyRead(500); + QByteArray buffer = tcp_socket.readAll(); if ( buffer.size() ) { QDataStream requst_data_stream(buffer); QString cmd_type, device_guid, cmd_data; requst_data_stream >> cmd_type >> device_guid; if ( cmd_type == "START" ) { requst_data_stream >> cmd_data; + QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid << cmd_data; processStartMeasureCmd(&tcp_socket, device_guid, cmd_data); } else if (cmd_type == "STOP") { + QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid; processStopMeasureCmd(&tcp_socket, device_guid); } else if (cmd_type == "SET") { requst_data_stream >> cmd_data; + QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid << cmd_data; processSetDeviceMeasureConfigParamsCmd(&tcp_socket, device_guid, cmd_data); } else if (cmd_type == "CLEAR") { + QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid; processClearDataCmd(&tcp_socket, device_guid); } else if (cmd_type == "DEVICE") { + QLOG_INFO() << QStringLiteral(u"处理请求:") << cmd_type << device_guid; processGetMeasureDeviceListCmd(&tcp_socket); } else { QByteArray replay_data; - QDataStream replay_data_stream(replay_data); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"未知请求"); tcp_socket.write(replay_data); tcp_socket.flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } } else { QByteArray replay_data; - QDataStream replay_data_stream(replay_data); - replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"未知请求"); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); + replay_data_stream << QString("UNKNOW") << false << QStringLiteral(u"请求信息空异常"); tcp_socket.write(replay_data); tcp_socket.flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } tcp_socket.disconnectFromHost(); - tcp_socket.waitForDisconnected(1000); + if (tcp_socket.state() != QTcpSocket::UnconnectedState) { + tcp_socket.waitForDisconnected(1000); + } } void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data) @@ -75,7 +85,7 @@ void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &devi if (channel_config_list.isEmpty()) { return; } - bool ok = true; + QStringList errors; for (auto channel_config : channel_config_list) { if (!channel_config.isValid()) continue; @@ -84,53 +94,53 @@ void MeasureTask::processStartMeasureCmd(QTcpSocket* socket, const QString &devi continue; int board_id = channel_config_info["BoardId"].toInt(); int channel_id = channel_config_info["ChannelId"].toInt(); - ok &= MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info); - QByteArray replay_data; - QDataStream replay_data_stream(replay_data); - if (!ok) { - replay_data_stream << QString("START") << ok << QStringLiteral(u"启动设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); - } else { - replay_data_stream << QString("START") << ok << QStringLiteral(u"启动设置板卡%1通道%2测量参数完成").arg(board_id).arg(channel_id); + if (!MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info)) { + const QString error = QStringLiteral(u"启动设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); + errors.append(error); } - socket->write(replay_data); - socket->flush(); - ok &= MeasureDeviceController::Instance()->StartMeasure(device_guid, board_id, channel_id); - if (!ok) { - replay_data_stream << QString("START") << ok << QStringLiteral(u"启动板卡%1通道%2测量失败"); - } else { - replay_data_stream << QString("START") << ok << QStringLiteral(u"启动板卡%1通道%2测量完成"); + if (!MeasureDeviceController::Instance()->StartMeasure(device_guid, board_id, channel_id)) { + const QString error = QStringLiteral(u"启动板卡%1通道%2测量失败").arg(board_id).arg(channel_id); + errors.append(error); } - socket->write(replay_data); - socket->flush(); - } - if (!ok) { - // MeasureDeviceController::Instance()->StopMeasure(device_guid); - return; - } - const QString& measure_data_gvf_filename = MeasureDeviceController::Instance()->GetMeasureGvfDataFilename(); - if (measure_data_gvf_filename.isEmpty()) { - return; } QByteArray replay_data; - QDataStream replay_data_stream(replay_data); - replay_data_stream << QString("DATA") << true << measure_data_gvf_filename; - socket->write(replay_data); - socket->flush(); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); + if (!errors.isEmpty()) { + replay_data_stream << QString("START") << false << errors.join("\n"); + socket->write(replay_data); + socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); + } else { + const QString& measure_data_gvf_filename = MeasureDeviceController::Instance()->GetMeasureGvfDataFilename(); + QString replay_info; + bool ok = measure_data_gvf_filename.isEmpty(); + if (!ok) { + replay_info = QStringLiteral(u"测量数据GVF文件未找到"); + } else { + replay_info = measure_data_gvf_filename; + } + QByteArray replay_data; + QDataStream replay_data_stream(&replay_data, QIODevice::Append); + replay_data_stream << QString("START") << ok << replay_info; + socket->write(replay_data); + socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); + } } void MeasureTask::processStopMeasureCmd(QTcpSocket* socket, const QString &device_guid) { MeasureDeviceController::Instance()->StopMeasure(device_guid); QByteArray replay_data; - QDataStream replay_data_stream(replay_data); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); replay_data_stream << QString("STOP") << true << QStringLiteral(u"停止测量完成"); socket->write(replay_data); socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, const QString &device_guid, const QString &cmd_data) { - bool ok = true; QByteArray json_data = cmd_data.toUtf8(); QJsonDocument json_doc = QJsonDocument::fromJson(json_data); if (json_doc.isNull()) { @@ -147,6 +157,7 @@ void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, con if (channel_config_list.isEmpty()) { return; } + QStringList errors; for (auto channel_config : channel_config_list) { if (!channel_config.isValid()) continue; @@ -155,27 +166,33 @@ void MeasureTask::processSetDeviceMeasureConfigParamsCmd(QTcpSocket* socket, con continue; int board_id = channel_config_info["BoardId"].toInt(); int channel_id = channel_config_info["ChannelId"].toInt(); - ok &= MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info); - QByteArray replay_data; - QDataStream replay_data_stream(replay_data); - if (!ok) { - replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); - } else { - replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置板卡%1通道%2测量参数完成").arg(board_id).arg(channel_id); + if (!MeasureDeviceController::Instance()->SetDeviceMeasureConfigParams(device_guid, board_id, channel_id, channel_config_info)) { + const QString error = QStringLiteral(u"设置板卡%1通道%2测量参数失败").arg(board_id).arg(channel_id); + errors.append(error); } - socket->write(replay_data); - socket->flush(); } + QByteArray replay_data; + QDataStream replay_data_stream(&replay_data, QIODevice::Append); + bool ok = !errors.isEmpty(); + if (!ok) { + replay_data_stream << QString("SET") << ok << errors.join("\n"); + } else { + replay_data_stream << QString("SET") << ok << QStringLiteral(u"设置测量参数完成"); + } + socket->write(replay_data); + socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } void MeasureTask::processClearDataCmd(QTcpSocket* socket, const QString &device_guid) { MeasureDeviceController::Instance()->ClearData(device_guid); QByteArray replay_data; - QDataStream replay_data_stream(replay_data); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); replay_data_stream << QString("CLEAR") << true << QStringLiteral(u"清除数据完成"); socket->write(replay_data); socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket) @@ -184,7 +201,7 @@ void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket) bool ok = !device_list.isEmpty(); QByteArray replay_data; - QDataStream replay_data_stream(replay_data); + QDataStream replay_data_stream(&replay_data, QIODevice::Append); replay_data_stream << QString("DEVICE"); if ( ok ) { replay_data_stream << ok << device_list.size(); @@ -192,8 +209,9 @@ void MeasureTask::processGetMeasureDeviceListCmd(QTcpSocket* socket) replay_data_stream << device_id; } } else { - replay_data_stream << ok; + replay_data_stream << ok << QStringLiteral(u"测量设备未找到"); } socket->write(replay_data); socket->flush(); + QLOG_INFO() << QStringLiteral(u"请求反馈:") << QString::fromUtf8(replay_data); } diff --git a/src/main.cpp b/src/main.cpp index d14a368..4b1783b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,23 +2,24 @@ #include "MeasureServer.h" #include "QsLogManage.h" #include +#include int main(int argc, char* argv[]) { QCoreApplication app(argc, argv); - // 创建日志记录器 QsLogManage::createLogger(); - MeasureDeviceController::Instance()->SetInitFinishedHandler( - [&](bool init_ok) { - if (init_ok) { - MeasureServer measure_server; - if (!measure_server.Start()) { - QLOG_ERROR() << measure_server.errorString(); + MeasureServer measure_server; + if (!measure_server.Start()) { + QLOG_ERROR() << QStringLiteral(u"测量服务启动失败:") + measure_server.errorString(); + } else { + MeasureDeviceController::Instance()->SetInitFinishedHandler( + [&](bool init_ok) { + if (!init_ok) { + QLOG_ERROR() << QStringLiteral(u"未找到测量设备,测量服务程序退出."); + // app.exit(EXIT_FAILURE); } - } else { - app.exit(EXIT_FAILURE); - } - }); - MeasureDeviceController::Instance()->InitFindMeasureDevice(); + }); + MeasureDeviceController::Instance()->InitFindMeasureDevice(); + } return app.exec(); } diff --git a/src/src.pro b/src/src.pro index d6514ad..ab3b1b4 100644 --- a/src/src.pro +++ b/src/src.pro @@ -8,7 +8,6 @@ msvc { QMAKE_CXXFLAGS += /utf-8 } - include($${PWD}/../Common.pri) include($${PROJECT_DIR}/3rdlib/QsLog/QsLog.pri) include($${PROJECT_DIR}/3rdlib/csv/csv.pri) @@ -24,13 +23,11 @@ SOURCES += \ $${PWD}/MeasureServer.cpp \ $${PWD}/MeasureTask.cpp \ $${PWD}/main.cpp \ - MeasureClient.cpp \ MeasureDeviceController.cpp HEADERS += \ $${PWD}/MeasureServer.h \ $${PWD}/MeasureTask.h \ - MeasureClient.h \ MeasureDeviceController.h