netparseprocess.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "netparseprocess.h"
  2. #include "logger.h"
  3. #include "defs.h"
  4. #include <QSettings>
  5. #include <QMetaEnum>
  6. NetParseProcess::NetParseProcess(QObject *parent)
  7. : QObject{parent}
  8. {
  9. restart();
  10. connect(&m_process, &QProcess::stateChanged, this, [this](QProcess::ProcessState newState){
  11. QString state = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(newState);
  12. QString error = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(m_process.error());
  13. LOG_INFO("netparse process state: {}, {}", state.toStdString(), error.toStdString());
  14. });
  15. // connect(&m_process, &QProcess::readyReadStandardOutput, this, [this](){
  16. // QByteArray output = m_process.readAllStandardOutput();
  17. // LOG_INFO(output.data());
  18. // });
  19. }
  20. NetParseProcess::~NetParseProcess()
  21. {
  22. stop();
  23. }
  24. void NetParseProcess::start(const QString &configure)
  25. {
  26. if (m_process.state() != QProcess::NotRunning) {
  27. LOG_WARN("netparse is already running!");
  28. return;
  29. }
  30. LOG_INFO("netparse process configure: {}", configure.toStdString());
  31. QString program = "/usr/bin/python";
  32. QStringList args;
  33. args << "/home/forlinx/Desktop/workspace/TPMFM-A/capture_mul.py";
  34. args << configure;
  35. args << NETPARSE_FIFO_PATH;
  36. LOG_INFO("netparse process args: {}", args.join(" ").toStdString());
  37. // save netparse configure file path
  38. QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
  39. settings.setIniCodec("UTF-8");
  40. settings.beginGroup("CONFIGURE");
  41. settings.setValue("NETPARSE", configure);
  42. settings.endGroup();
  43. m_process.start(program, args);
  44. }
  45. void NetParseProcess::stop()
  46. {
  47. if (m_process.state() == QProcess::NotRunning) {
  48. LOG_INFO("netparse is not running!");
  49. return;
  50. }
  51. LOG_INFO("stopping netparse...");
  52. m_process.kill(); // 强制终止
  53. m_process.waitForFinished(); // 等待退出
  54. LOG_INFO("netparse stopped.");
  55. }
  56. void NetParseProcess::restart(const QString &configure)
  57. {
  58. stop();
  59. if(configure.isEmpty()) {
  60. QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
  61. settings.setIniCodec("UTF-8");
  62. settings.beginGroup("CONFIGURE");
  63. if(settings.contains("NETPARSE"))
  64. start(settings.value("NETPARSE").toString());
  65. settings.endGroup();
  66. } else {
  67. start(configure);
  68. }
  69. }
  70. bool NetParseProcess::isRunning()
  71. {
  72. return m_process.state() != QProcess::NotRunning;
  73. }