Deskflow 1.24.0.365
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 const char *daemonInfo() const override;
58 void loadConfig() override;
59 bool loadConfig(const std::string &pathname) override;
61 int mainLoop() override;
62 int runInner(StartupFunc startup) override;
63 int start() override;
64 void startNode() override;
65
66 //
67 // Regular functions
68 //
69
70 void reloadConfig();
71 void forceReconnect();
72 void resetServer();
73 void handleClientConnected(const Event &e, ClientListener *listener);
74 void closeServer(Server *server);
75 void stopRetryTimer();
77 void stopServer();
78 void closePrimaryClient(PrimaryClient *primaryClient);
80 void cleanupServer();
81 bool initServer();
82 void retryHandler();
84 PrimaryClient *openPrimaryClient(const std::string &name, deskflow::Screen *screen);
85 void handleSuspend();
86 void handleResume();
88 Server *openServer(ServerConfig &config, PrimaryClient *primaryClient);
89 bool startServer();
91 {
92 return m_server;
93 }
94
95 //
96 // Static functions
97 //
98
99 static void reloadSignalHandler(Arch::ThreadSignal, void *);
101 {
102 return (ServerApp &)App::instance();
103 }
104
105private:
106 void handleScreenSwitched() const;
107 std::unique_ptr<ISocketFactory> getSocketFactory() const;
108 NetworkAddress getAddress(const NetworkAddress &address) const;
109
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:95
App(IEventQueue *events, const QString &processName)
Definition App.cpp:42
QString processName() const
Definition App.h:101
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:583
void resetServer()
Definition ServerApp.cpp:575
static void reloadSignalHandler(Arch::ThreadSignal, void *)
Definition ServerApp.cpp:87
const char * daemonName() const override
Definition ServerApp.cpp:607
void closePrimaryClient(PrimaryClient *primaryClient)
Definition ServerApp.cpp:216
void closeServer(Server *server)
Definition ServerApp.cpp:153
const char * daemonInfo() const override
Definition ServerApp.cpp:614
void retryHandler()
Definition ServerApp.cpp:251
deskflow::Screen * openServerScreen()
Definition ServerApp.cpp:336
Server * openServer(ServerConfig &config, PrimaryClient *primaryClient)
Definition ServerApp.cpp:468
int mainLoop() override
Definition ServerApp.cpp:497
void handleSuspend()
Definition ServerApp.cpp:429
PrimaryClient * openPrimaryClient(const std::string &name, deskflow::Screen *screen)
Definition ServerApp.cpp:423
ClientListener * openClientListener(const NetworkAddress &address)
Definition ServerApp.cpp:447
ServerApp(IEventQueue *events, const QString &processName=QString())
Definition ServerApp.cpp:65
void handleResume()
Definition ServerApp.cpp:438
static ServerApp & instance()
Definition ServerApp.h:100
bool startServer()
Definition ServerApp.cpp:349
void cleanupServer()
Definition ServerApp.cpp:232
int start() override
Definition ServerApp.cpp:601
deskflow::Screen * createScreen() override
Definition ServerApp.cpp:393
void loadConfig() override
Definition ServerApp.cpp:104
void handleClientConnected(const Event &e, ClientListener *listener)
Definition ServerApp.cpp:145
Server * getServerPtr()
Definition ServerApp.h:90
void closeServerScreen(deskflow::Screen *screen)
Definition ServerApp.cpp:221
void startNode() override
Definition ServerApp.cpp:621
void parseArgs() override
Definition ServerApp.cpp:71
void stopRetryTimer()
Definition ServerApp.cpp:182
void closeClientListener(ClientListener *listen)
Definition ServerApp.cpp:191
void stopServer()
Definition ServerApp.cpp:199
bool initServer()
Definition ServerApp.cpp:297
void forceReconnect()
Definition ServerApp.cpp:138
void reloadConfig()
Definition ServerApp.cpp:93
Deskflow server.
Definition Server.h:41
Platform independent screen.
Definition Screen.h:30
Server configuration.
Definition Config.h:52
Definition EventTypes.h:11