Deskflow 1.25.0.128
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 QString &filename) 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 QString currentConfig() const;
111 bool m_suspended = false;
112 Server *m_server = nullptr;
114 deskflow::Screen *m_serverScreen = nullptr;
115 PrimaryClient *m_primaryClient = nullptr;
116 ClientListener *m_listener = nullptr;
117 EventQueueTimer *m_timer = nullptr;
118 NetworkAddress *m_deskflowAddress = nullptr;
119 std::string m_name;
120 std::shared_ptr<deskflow::server::Config> m_config;
121};
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:594
void resetServer()
Definition ServerApp.cpp:586
static void reloadSignalHandler(Arch::ThreadSignal, void *)
Definition ServerApp.cpp:86
const char * daemonName() const override
Definition ServerApp.cpp:618
void closePrimaryClient(PrimaryClient *primaryClient)
Definition ServerApp.cpp:227
void closeServer(Server *server)
Definition ServerApp.cpp:164
const char * daemonInfo() const override
Definition ServerApp.cpp:625
void retryHandler()
Definition ServerApp.cpp:262
deskflow::Screen * openServerScreen()
Definition ServerApp.cpp:347
Server * openServer(ServerConfig &config, PrimaryClient *primaryClient)
Definition ServerApp.cpp:479
int mainLoop() override
Definition ServerApp.cpp:508
void handleSuspend()
Definition ServerApp.cpp:440
PrimaryClient * openPrimaryClient(const std::string &name, deskflow::Screen *screen)
Definition ServerApp.cpp:434
ClientListener * openClientListener(const NetworkAddress &address)
Definition ServerApp.cpp:458
ServerApp(IEventQueue *events, const QString &processName=QString())
Definition ServerApp.cpp:64
void handleResume()
Definition ServerApp.cpp:449
static ServerApp & instance()
Definition ServerApp.h:100
bool startServer()
Definition ServerApp.cpp:360
void cleanupServer()
Definition ServerApp.cpp:243
int start() override
Definition ServerApp.cpp:612
deskflow::Screen * createScreen() override
Definition ServerApp.cpp:404
void loadConfig() override
Definition ServerApp.cpp:110
void handleClientConnected(const Event &e, ClientListener *listener)
Definition ServerApp.cpp:156
Server * getServerPtr()
Definition ServerApp.h:90
void closeServerScreen(deskflow::Screen *screen)
Definition ServerApp.cpp:232
void startNode() override
Definition ServerApp.cpp:632
void parseArgs() override
Definition ServerApp.cpp:70
void stopRetryTimer()
Definition ServerApp.cpp:193
void closeClientListener(ClientListener *listen)
Definition ServerApp.cpp:202
void stopServer()
Definition ServerApp.cpp:210
bool initServer()
Definition ServerApp.cpp:308
void forceReconnect()
Definition ServerApp.cpp:149
void reloadConfig()
Definition ServerApp.cpp:99
Deskflow server.
Definition Server.h:41
Platform independent screen.
Definition Screen.h:30
Server configuration.
Definition Config.h:52
Definition EventTypes.h:11