Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
CoreProcess.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello <sithlord48@gmail.com>
4 * SPDX-FileCopyrightText: (C) 2024 - 2025 Symless Ltd.
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "common/Settings.h"
11#include "gui/FileTail.h"
13
14#include <QMutex>
15#include <QObject>
16#include <QProcess>
17#include <QTimer>
18
19namespace deskflow::gui {
20
21namespace ipc {
22class DaemonIpcClient;
23}
24
25class CoreProcess : public QObject
26{
27 using ProcessMode = Settings::ProcessMode;
28 using IServerConfig = deskflow::gui::IServerConfig;
29
30 Q_OBJECT
31
32public:
33 enum class Error
34 {
37 };
46 Q_ENUM(ProcessState)
47
55
56 explicit CoreProcess(const IServerConfig &serverConfig);
57
58 void start(std::optional<ProcessMode> processMode = std::nullopt);
59 void stop(std::optional<ProcessMode> processMode = std::nullopt);
60 void restart();
61 void cleanup();
62 void applyLogLevel();
63 void clearSettings();
64 void retryDaemon();
65
66 // getters
68 {
69 return m_mode;
70 }
71 QString secureSocketVersion() const
72 {
73 return m_secureSocketVersion;
74 }
75 bool isStarted() const
76 {
77 return m_processState == ProcessState::Started;
78 }
80 {
81 return m_processState;
82 }
84 {
85 return m_connectionState;
86 }
87
88 // setters
89 void setAddress(const QString &address)
90 {
91 m_address = correctedAddress(address);
92 }
94 {
95 m_mode = mode;
96 }
97
98Q_SIGNALS:
100 void logLine(const QString &line);
103 void secureSocket(bool enabled);
105
106private Q_SLOTS:
107 void onProcessFinished(int exitCode, QProcess::ExitStatus);
108 void onProcessReadyReadStandardOutput();
109 void onProcessReadyReadStandardError();
110 void daemonIpcClientConnected();
111
112private:
113 void startForegroundProcess(const QStringList &args);
114 void startProcessFromDaemon(const QStringList &args);
115 void stopForegroundProcess() const;
116 void stopProcessFromDaemon();
117 QString persistServerConfig() const;
118 void setConnectionState(ConnectionState state);
119 void setProcessState(ProcessState state);
120 void checkLogLine(const QString &line);
121 bool checkSecureSocket(const QString &line);
122 void handleLogLines(const QString &text);
123 QString correctedAddress(const QString &address) const;
124 QString requestDaemonLogPath();
125 static QString makeQuotedArgs(const QString &app, const QStringList &args);
126 static QString processModeToString(const Settings::ProcessMode mode);
127 static QString processStateToString(const CoreProcess::ProcessState state);
128 static QString wrapIpv6(const QString &address);
129
130#ifdef Q_OS_MAC
131 void checkOSXNotification(const QString &line);
132#endif
133
134 const IServerConfig &m_serverConfig;
135 QString m_address;
136 ProcessState m_processState = ProcessState::Stopped;
139 QMutex m_processMutex;
140 QString m_secureSocketVersion;
141 std::optional<ProcessMode> m_lastProcessMode = std::nullopt;
142 QTimer m_retryTimer;
143 int m_connections = 0;
144 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
145 FileTail *m_daemonFileTail = nullptr;
146 QProcess *m_process = nullptr;
147 QString m_appPath;
148};
149
150} // namespace deskflow::gui
CoreMode
Definition Settings.h:111
@ None
Definition Settings.h:112
ProcessMode
Definition Settings.h:104
void restart()
Definition CoreProcess.cpp:385
void stop(std::optional< ProcessMode > processMode=std::nullopt)
Definition CoreProcess.cpp:357
void processStateChanged(deskflow::gui::CoreProcess::ProcessState state)
void secureSocket(bool enabled)
void retryDaemon()
Definition CoreProcess.cpp:557
void clearSettings()
Definition CoreProcess.cpp:541
ProcessState processState() const
Definition CoreProcess.h:79
Settings::CoreMode mode() const
Definition CoreProcess.h:67
bool isStarted() const
Definition CoreProcess.h:75
QString secureSocketVersion() const
Definition CoreProcess.h:71
void start(std::optional< ProcessMode > processMode=std::nullopt)
Definition CoreProcess.cpp:287
CoreProcess(const IServerConfig &serverConfig)
Definition CoreProcess.cpp:95
void applyLogLevel()
Definition CoreProcess.cpp:180
ConnectionState
Definition CoreProcess.h:49
@ Connected
Definition CoreProcess.h:52
@ Listening
Definition CoreProcess.h:53
@ Connecting
Definition CoreProcess.h:51
@ Disconnected
Definition CoreProcess.h:50
void error(deskflow::gui::CoreProcess::Error error)
void cleanup()
Definition CoreProcess.cpp:407
ProcessState
Definition CoreProcess.h:39
@ Stopping
Definition CoreProcess.h:42
@ Started
Definition CoreProcess.h:41
@ RetryPending
Definition CoreProcess.h:44
@ Stopped
Definition CoreProcess.h:43
@ Starting
Definition CoreProcess.h:40
void setMode(Settings::CoreMode mode)
Definition CoreProcess.h:93
void connectionStateChanged(deskflow::gui::CoreProcess::ConnectionState state)
ConnectionState connectionState() const
Definition CoreProcess.h:83
Error
Definition CoreProcess.h:34
@ StartFailed
Definition CoreProcess.h:36
@ AddressMissing
Definition CoreProcess.h:35
void logLine(const QString &line)
void setAddress(const QString &address)
Definition CoreProcess.h:89
Definition FileTail.h:17
Definition IServerConfig.h:18
Definition DaemonIpcClient.h:16
Definition CoreProcess.h:21
Definition IServerConfig.h:14