Deskflow 1.26.0.0
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ServerApp.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2012 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include "arch/Arch.h"
13#include "deskflow/App.h"
14#include "net/NetworkAddress.h"
15#include "server/Config.h"
16
17#include <memory>
18
28
29class Server;
30namespace deskflow {
31class Screen;
32}
33class ClientListener;
34class EventQueueTimer;
35class ILogOutputter;
36class IEventQueue;
37class ISocketFactory;
38
39namespace deskflow {
40class ServerArgs;
41}
42
43class ServerApp : public App
44{
45 using ServerConfig = deskflow::server::Config;
46
47public:
48 explicit ServerApp(IEventQueue *events, const QString &processName = QString());
49 ~ServerApp() override = default;
50
51 //
52 // IApp overrides
53 //
54
55 void parseArgs() override;
56 const char *daemonName() const override;
57 void loadConfig() override;
58 bool loadConfig(const QString &filename) override;
60 int mainLoop() override;
61 int runInner(StartupFunc startup) override;
62 int start() override;
63 void startNode() override;
64
65 //
66 // Regular functions
67 //
68
69 void reloadConfig();
70 void forceReconnect();
71 void resetServer();
72 void handleClientConnected(const Event &e, ClientListener *listener);
73 void closeServer(Server *server);
74 void stopRetryTimer();
76 void stopServer();
77 void closePrimaryClient(PrimaryClient *primaryClient);
79 void cleanupServer();
80 bool initServer();
81 void retryHandler();
83 PrimaryClient *openPrimaryClient(const std::string &name, deskflow::Screen *screen);
84 void handleSuspend();
85 void handleResume();
87 Server *openServer(ServerConfig &config, PrimaryClient *primaryClient);
88 bool startServer();
90 {
91 return m_server;
92 }
93
94 //
95 // Static functions
96 //
97
98 static void reloadSignalHandler(Arch::ThreadSignal, void *);
100 {
101 return (ServerApp &)App::instance();
102 }
103
104private:
105 void handleScreenSwitched() const;
106 std::unique_ptr<ISocketFactory> getSocketFactory() const;
107 NetworkAddress getAddress(const NetworkAddress &address) const;
108
109 QString currentConfig() const;
110 bool m_suspended = false;
111 Server *m_server = nullptr;
113 deskflow::Screen *m_serverScreen = nullptr;
114 PrimaryClient *m_primaryClient = nullptr;
115 ClientListener *m_listener = nullptr;
116 EventQueueTimer *m_timer = nullptr;
117 NetworkAddress *m_deskflowAddress = nullptr;
118 std::string m_name;
119 std::shared_ptr<deskflow::server::Config> m_config;
120};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:28
int(*)() StartupFunc
Definition IApp.h:11
ServerState
Definition ServerApp.h:20
@ Initializing
Definition ServerApp.h:22
@ Initialized
Definition ServerApp.h:24
@ InitializingToStart
Definition ServerApp.h:23
@ Started
Definition ServerApp.h:26
@ Starting
Definition ServerApp.h:25
@ Uninitialized
Definition ServerApp.h:21
static App & instance()
Definition App.h:94
App(IEventQueue *events, const QString &processName)
Definition App.cpp:42
QString processName() const
Definition App.h:100
Definition ClientListener.h:28
Definition EventQueueTimer.h:12
Event.
Definition Event.h:29
Event queue interface.
Definition IEventQueue.h:29
Outputter interface.
Definition ILogOutputter.h:21
Socket factory.
Definition ISocketFactory.h:23
Network address type.
Definition NetworkAddress.h:17
Primary screen as pseudo-client.
Definition PrimaryClient.h:23
~ServerApp() override=default
int runInner(StartupFunc startup) override
Definition ServerApp.cpp:587
void resetServer()
Definition ServerApp.cpp:579
static void reloadSignalHandler(Arch::ThreadSignal, void *)
Definition ServerApp.cpp:82
const char * daemonName() const override
Definition ServerApp.cpp:606
void closePrimaryClient(PrimaryClient *primaryClient)
Definition ServerApp.cpp:223
void closeServer(Server *server)
Definition ServerApp.cpp:160
void retryHandler()
Definition ServerApp.cpp:258
deskflow::Screen * openServerScreen()
Definition ServerApp.cpp:343
Server * openServer(ServerConfig &config, PrimaryClient *primaryClient)
Definition ServerApp.cpp:475
int mainLoop() override
Definition ServerApp.cpp:504
void handleSuspend()
Definition ServerApp.cpp:436
PrimaryClient * openPrimaryClient(const std::string &name, deskflow::Screen *screen)
Definition ServerApp.cpp:430
ClientListener * openClientListener(const NetworkAddress &address)
Definition ServerApp.cpp:454
ServerApp(IEventQueue *events, const QString &processName=QString())
Definition ServerApp.cpp:60
void handleResume()
Definition ServerApp.cpp:445
static ServerApp & instance()
Definition ServerApp.h:99
bool startServer()
Definition ServerApp.cpp:356
void cleanupServer()
Definition ServerApp.cpp:239
int start() override
Definition ServerApp.cpp:600
deskflow::Screen * createScreen() override
Definition ServerApp.cpp:400
void loadConfig() override
Definition ServerApp.cpp:106
void handleClientConnected(const Event &e, ClientListener *listener)
Definition ServerApp.cpp:152
Server * getServerPtr()
Definition ServerApp.h:89
void closeServerScreen(deskflow::Screen *screen)
Definition ServerApp.cpp:228
void startNode() override
Definition ServerApp.cpp:613
void parseArgs() override
Definition ServerApp.cpp:66
void stopRetryTimer()
Definition ServerApp.cpp:189
void closeClientListener(ClientListener *listen)
Definition ServerApp.cpp:198
void stopServer()
Definition ServerApp.cpp:206
bool initServer()
Definition ServerApp.cpp:304
void forceReconnect()
Definition ServerApp.cpp:145
void reloadConfig()
Definition ServerApp.cpp:95
Deskflow server.
Definition Server.h:41
Platform independent screen.
Definition Screen.h:30
Server configuration.
Definition Config.h:52
Definition DaemonApp.h:20