UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
launch_manager.hpp
Go to the documentation of this file.
1#ifndef LAUNCH_MANAGAER_HPP_7a0f2a6b7dfc
2#define LAUNCH_MANAGAER_HPP_7a0f2a6b7dfc
3
4#include <QProcess>
5#include <QString>
6#include <QTimer>
7#include <QStringList>
8#include <memory>
9#include "line_buffer.hpp"
10
11class LaunchContext : public QObject{
12 Q_OBJECT
13public:
14 enum class Type {
15 None = 0,
16 Preview,
17 Run,
18 Query
19 };
20
21 struct ExtraData{
22 virtual ~ExtraData() = default;
23 };
24
26
29 QStringList args;
30 QProcess process;
32 std::unique_ptr<ExtraData> extraData;
33
34 void terminate();
35
36signals:
37 void processTerminated(int code, QProcess::ExitStatus es, bool wasRequested);
38 void processOutputRead(QString str);
39 void processOutputLine(std::string_view sv);
40
41private:
42 static constexpr int terminateTimeoutMs = 1000;
43 QTimer killTimer;
45
46private slots:
47 void processTerminationHandler(int code, QProcess::ExitStatus es);
48 void processOutput();
49
50};
51
52class LaunchManager : public QObject{
53 Q_OBJECT
54public:
56
57 void launch(std::unique_ptr<LaunchContext>&& ctx);
58 void stop();
59
61
62 /* Functions to allow modifying and relaunching the current LaunchContext
63 * from the processTerminated signal. At that time LaunchManager::processFinished
64 * is still pending execution, so the usual launch() cannot be used
65 */
66 std::unique_ptr<LaunchContext> extractCurrentCtx();
67 void reLaunch(std::unique_ptr<LaunchContext>&& ctx);
68
69private:
70 std::unique_ptr<LaunchContext> currentLaunch;
71 std::unique_ptr<LaunchContext> queuedLaunch;
72
73 void doLaunch(std::unique_ptr<LaunchContext>&& ctx);
74
75private slots:
76 void processFinished();
77
78};
79
80
81#endif
void processOutputLine(std::string_view sv)
void processTerminated(int code, QProcess::ExitStatus es, bool wasRequested)
LineBuffer lineBuf
QStringList args
std::unique_ptr< ExtraData > extraData
void processOutputRead(QString str)
void processTerminationHandler(int code, QProcess::ExitStatus es)
static constexpr int terminateTimeoutMs
std::unique_ptr< LaunchContext > currentLaunch
std::unique_ptr< LaunchContext > queuedLaunch
void doLaunch(std::unique_ptr< LaunchContext > &&ctx)
LaunchContext::Type getCurrentStatus() const
void launch(std::unique_ptr< LaunchContext > &&ctx)
void reLaunch(std::unique_ptr< LaunchContext > &&ctx)
std::unique_ptr< LaunchContext > extractCurrentCtx()
virtual ~ExtraData()=default