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 }