Deskflow 1.22.0.197
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 "base/EventTypes.h"
14#include "base/String.h"
15#include "common/Constants.h"
16#include "deskflow/App.h"
17#include "net/NetworkAddress.h"
18#include "server/Config.h"
19
20#include <memory>
21
31
32class Server;
33namespace deskflow {
34class Screen;
35}
36class ClientListener;
37class EventQueueTimer;
38class ILogOutputter;
39class IEventQueue;
40class ISocketFactory;
41
42namespace deskflow {
43class ServerArgs;
44}
45
46class ServerApp : public App
47{
48 using ServerConfig = deskflow::server::Config;
49
50public:
51 explicit ServerApp(IEventQueue *events);
52 ~ServerApp() override = default;
53
54 //
55 // IApp overrides
56 //
57
58 void parseArgs(int argc, const char *const *argv) override;
59 void help() override;
60 const char *daemonName() const override;
61 const char *daemonInfo() const override;
62 void loadConfig() override;
63 bool loadConfig(const std::string &pathname) override;
65 int mainLoop() override;
66 int runInner(int argc, char **argv, StartupFunc startup) override;
67 int standardStartup(int argc, char **argv) override;
68 int foregroundStartup(int argc, char **argv) override;
69 void startNode() override;
70
71 //
72 // App overrides
73 //
74
75 std::string configSection() const override
76 {
77 return "server";
78 }
79
80 //
81 // Regular functions
82 //
83
84 void reloadConfig();
85 void forceReconnect();
86 void resetServer();
87 void handleClientConnected(const Event &e, ClientListener *listener);
88 void closeServer(Server *server);
89 void stopRetryTimer();
90 void updateStatus() const;
91 void updateStatus(const std::string_view &msg) const;
93 void stopServer();
94 void closePrimaryClient(PrimaryClient *primaryClient);
96 void cleanupServer();
97 bool initServer();
98 void retryHandler();
100 PrimaryClient *openPrimaryClient(const std::string &name, deskflow::Screen *screen);
101 void handleScreenError();
102 void handleSuspend();
103 void handleResume();
105 Server *openServer(ServerConfig &config, PrimaryClient *primaryClient);
106 bool startServer();
108 {
109 return m_server;
110 }
111
113 {
114 return (deskflow::ServerArgs &)argsBase();
115 }
116
117 //
118 // Static functions
119 //
120
121 static void reloadSignalHandler(Arch::ThreadSignal, void *);
123 {
124 return (ServerApp &)App::instance();
125 }
126
127private:
128 void handleScreenSwitched() const;
129 std::unique_ptr<ISocketFactory> getSocketFactory() const;
130 NetworkAddress getAddress(const NetworkAddress &address) const;
131
132 bool m_suspended = false;
133 Server *m_server = nullptr;
135 deskflow::Screen *m_serverScreen = nullptr;
136 PrimaryClient *m_primaryClient = nullptr;
137 ClientListener *m_listener = nullptr;
138 EventQueueTimer *m_timer = nullptr;
139 NetworkAddress *m_deskflowAddress = nullptr;
140};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
int(*)(int, char **) StartupFunc
Definition IApp.h:12
EServerState
Definition ServerApp.h:23
@ kStarting
Definition ServerApp.h:28
@ kUninitialized
Definition ServerApp.h:24
@ kInitializing
Definition ServerApp.h:25
@ kStarted
Definition ServerApp.h:29
@ kInitializingToStart
Definition ServerApp.h:26
@ kInitialized
Definition ServerApp.h:27
static App & instance()
Definition App.h:106
App(IEventQueue *events, deskflow::ArgsBase *args)
Definition App.cpp:44
deskflow::ArgsBase & argsBase() const override
Definition App.h:79
Definition ClientListener.h:30
Definition SimpleEventQueueBuffer.cpp:13
Event.
Definition Event.h:27
Event queue interface.
Definition IEventQueue.h:32
Outputter interface.
Definition ILogOutputter.h:21
Socket factory.
Definition ISocketFactory.h:24
Network address type.
Definition NetworkAddress.h:18
Primary screen as pseudo-client.
Definition PrimaryClient.h:24
~ServerApp() override=default
void resetServer()
Definition ServerApp.cpp:667
static void reloadSignalHandler(Arch::ThreadSignal, void *)
Definition ServerApp.cpp:143
const char * daemonName() const override
Definition ServerApp.cpp:714
std::string configSection() const override
Definition ServerApp.h:75
void closePrimaryClient(PrimaryClient *primaryClient)
Definition ServerApp.cpp:280
int runInner(int argc, char **argv, StartupFunc startup) override
Definition ServerApp.cpp:675
void closeServer(Server *server)
Definition ServerApp.cpp:210
const char * daemonInfo() const override
Definition ServerApp.cpp:723
void retryHandler()
Definition ServerApp.cpp:314
deskflow::Screen * openServerScreen()
Definition ServerApp.cpp:410
void handleScreenError()
Definition ServerApp.cpp:513
Server * openServer(ServerConfig &config, PrimaryClient *primaryClient)
Definition ServerApp.cpp:558
ServerApp(IEventQueue *events)
Definition ServerApp.cpp:70
int mainLoop() override
Definition ServerApp.cpp:588
void handleSuspend()
Definition ServerApp.cpp:519
int standardStartup(int argc, char **argv) override
Definition ServerApp.cpp:694
PrimaryClient * openPrimaryClient(const std::string &name, deskflow::Screen *screen)
Definition ServerApp.cpp:507
ClientListener * openClientListener(const NetworkAddress &address)
Definition ServerApp.cpp:537
void updateStatus() const
Definition ServerApp.cpp:246
void handleResume()
Definition ServerApp.cpp:528
int foregroundStartup(int argc, char **argv) override
Definition ServerApp.cpp:706
static ServerApp & instance()
Definition ServerApp.h:122
deskflow::ServerArgs & args() const
Definition ServerApp.h:112
void help() override
Definition ServerApp.cpp:100
bool startServer()
Definition ServerApp.cpp:421
void cleanupServer()
Definition ServerApp.cpp:296
deskflow::Screen * createScreen() override
Definition ServerApp.cpp:482
void loadConfig() override
Definition ServerApp.cpp:160
void handleClientConnected(const Event &e, ClientListener *listener)
Definition ServerApp.cpp:201
Server * getServerPtr()
Definition ServerApp.h:107
void closeServerScreen(deskflow::Screen *screen)
Definition ServerApp.cpp:285
void startNode() override
Definition ServerApp.cpp:732
void stopRetryTimer()
Definition ServerApp.cpp:237
void closeClientListener(ClientListener *listen)
Definition ServerApp.cpp:256
void stopServer()
Definition ServerApp.cpp:264
bool initServer()
Definition ServerApp.cpp:359
void forceReconnect()
Definition ServerApp.cpp:194
void reloadConfig()
Definition ServerApp.cpp:149
void parseArgs(int argc, const char *const *argv) override
Definition ServerApp.cpp:75
Definition ServerConfig.h:41
Deskflow server.
Definition Server.h:44
Platform independent screen.
Definition Screen.h:30
Definition ServerArgs.h:17
Server configuration.
Definition Config.h:53
Definition EventTypes.h:11