File indexing completed on 2024-05-12 05:51:07

0001 /*
0002     SPDX-FileCopyrightText: 2022 Héctor Mesa Jiménez <wmj.py@gmx.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #pragma once
0007 
0008 #include <QProcess>
0009 #include <QTcpSocket>
0010 #include <optional>
0011 #include <utility>
0012 
0013 #include "bus.h"
0014 
0015 namespace dap
0016 {
0017 class SocketProcessBus : public Bus
0018 {
0019     Q_OBJECT
0020 public:
0021     explicit SocketProcessBus(QObject *parent = nullptr);
0022     ~SocketProcessBus() override;
0023 
0024     QByteArray read() override;
0025     quint16 write(const QByteArray &data) override;
0026 
0027     bool start(const settings::BusSettings &configuration) override;
0028     void close() override;
0029 
0030     QProcess process;
0031     QTcpSocket socket;
0032 
0033 private:
0034     void closeResources();
0035     void onProcessStateChanged(const QProcess::ProcessState &state);
0036     void onSocketStateChanged(const QTcpSocket::SocketState &state);
0037     void connectSocket();
0038     void readError();
0039     void readOutput();
0040 
0041     std::optional<std::function<void()>> m_connectionHandler;
0042 
0043     enum { None, Terminate, Kill } m_tryClose = None;
0044 };
0045 
0046 }