Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
Client.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 - 2016 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 "deskflow/IClient.h"
12
13#include "HelloBack.h"
14#include "base/EventTypes.h"
15#include "deskflow/ClientArgs.h"
16#include "deskflow/Clipboard.h"
17#include "deskflow/INode.h"
18#include "mt/CondVar.h"
19#include "net/NetworkAddress.h"
20
21#include <memory>
22
23class EventQueueTimer;
24namespace deskflow {
25class Screen;
26}
27class ServerProxy;
28class IDataSocket;
29class ISocketFactory;
30namespace deskflow {
31class IStream;
32}
33class IEventQueue;
34class Thread;
35class TCPSocket;
36
38
41class Client : public IClient, public INode
42{
43public:
45 {
46 public:
47 explicit FailInfo(const char *what) : m_what(what)
48 {
49 // do nothing
50 }
51 bool m_retry = false;
52 std::string m_what;
53 };
54
55public:
61 Client(
62 IEventQueue *events, const std::string &name, const NetworkAddress &address, ISocketFactory *socketFactory,
63 deskflow::Screen *screen, deskflow::ClientArgs const &args
64 );
65 Client(Client const &) = delete;
66 Client(Client &&) = delete;
67 ~Client() override;
68
69 Client &operator=(Client const &) = delete;
70 Client &operator=(Client &&) = delete;
71
73
74
76
80 void connect(size_t addressIndex = 0);
81
83
86 void disconnect(const char *msg);
87
89
93 void refuseConnection(const char *msg);
94
96
99 virtual void handshakeComplete();
100
102
104
106
109 bool isConnected() const;
110
112
116 bool isConnecting() const;
117
119
124
127 {
128 return m_resolvedAddressesCount;
129 }
130
132
133 // IScreen overrides
134 void *getEventTarget() const final;
135 bool getClipboard(ClipboardID id, IClipboard *) const override;
136 void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override;
137 void getCursorPos(int32_t &x, int32_t &y) const override;
138
139 // IClient overrides
140 void enter(int32_t xAbs, int32_t yAbs, uint32_t seqNum, KeyModifierMask mask, bool forScreensaver) override;
141 bool leave() override;
142 void setClipboard(ClipboardID, const IClipboard *) override;
143 void grabClipboard(ClipboardID) override;
144 void setClipboardDirty(ClipboardID, bool) override;
145 void keyDown(KeyID, KeyModifierMask, KeyButton, const std::string &) override;
146 void keyRepeat(KeyID, KeyModifierMask, int32_t count, KeyButton, const std::string &lang) override;
147 void keyUp(KeyID, KeyModifierMask, KeyButton) override;
148 void mouseDown(ButtonID) override;
149 void mouseUp(ButtonID) override;
150 void mouseMove(int32_t xAbs, int32_t yAbs) override;
151 void mouseRelativeMove(int32_t xRel, int32_t yRel) override;
152 void mouseWheel(int32_t xDelta, int32_t yDelta) override;
153 void screensaver(bool activate) override;
154 void resetOptions() override;
155 void setOptions(const OptionsList &options) override;
156 std::string getName() const override;
157
158private:
159 void sendClipboard(ClipboardID);
160 void sendEvent(EventTypes, void *);
161 void sendConnectionFailedEvent(const char *msg);
162 void setupConnecting();
163 void setupConnection();
164 void setupScreen();
165 void setupTimer();
166 void cleanup();
167 void cleanupConnecting();
168 void cleanupConnection();
169 void cleanupScreen();
170 void cleanupTimer();
171 void cleanupStream();
172 void handleConnected();
173 void handleConnectionFailed(const Event &event);
174 void handleConnectTimeout();
175 void handleOutputError();
176 void handleDisconnected();
177 void handleShapeChanged();
178 void handleClipboardGrabbed(const Event &event);
179 void handleHello();
180 void handleSuspend();
181 void handleResume();
182 void sendClipboardThread(void *);
183 void bindNetworkInterface(IDataSocket *socket) const;
184
185private:
186 std::string m_name;
187 NetworkAddress m_serverAddress;
188 ISocketFactory *m_socketFactory = nullptr;
189 deskflow::Screen *m_screen = nullptr;
190 deskflow::IStream *m_stream = nullptr;
191 EventQueueTimer *m_timer = nullptr;
192 ServerProxy *m_server = nullptr;
193 bool m_ready = false;
194 bool m_active = false;
195 bool m_suspended = false;
196 bool m_connectOnResume = false;
197 bool m_ownClipboard[kClipboardEnd];
198 bool m_sentClipboard[kClipboardEnd];
199 IClipboard::Time m_timeClipboard[kClipboardEnd];
200 std::string m_dataClipboard[kClipboardEnd];
201 IEventQueue *m_events = nullptr;
202 bool m_useSecureNetwork = false;
203 bool m_enableClipboard = true;
204 size_t m_maximumClipboardSize = INT_MAX;
205 deskflow::ClientArgs m_args;
206 size_t m_resolvedAddressesCount = 0;
207 std::unique_ptr<deskflow::client::HelloBack> m_pHelloBack;
208};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
static const ClipboardID kClipboardEnd
Definition ClipboardTypes.h:30
uint8_t ClipboardID
Clipboard ID.
Definition ClipboardTypes.h:16
@ Client
Definition FingerprintDialog.h:17
uint32_t KeyID
Key ID.
Definition KeyTypes.h:22
uint16_t KeyButton
Key Code.
Definition KeyTypes.h:35
uint32_t KeyModifierMask
Modifier key mask.
Definition KeyTypes.h:45
uint8_t ButtonID
Mouse button ID.
Definition MouseTypes.h:16
std::vector< uint32_t > OptionsList
Definition OptionTypes.h:27
int y
Definition ServerConfig.cpp:27
int x
Definition ServerConfig.cpp:26
std::string m_what
Definition Client.h:52
bool m_retry
Definition Client.h:51
FailInfo(const char *what)
Definition Client.h:47
void enter(int32_t xAbs, int32_t yAbs, uint32_t seqNum, KeyModifierMask mask, bool forScreensaver) override
Enter screen.
Definition Client.cpp:207
void resetOptions() override
Notify of options changes.
Definition Client.cpp:296
void grabClipboard(ClipboardID) override
Grab clipboard.
Definition Client.cpp:239
void keyUp(KeyID, KeyModifierMask, KeyButton) override
Notify of key release.
Definition Client.cpp:261
void mouseRelativeMove(int32_t xRel, int32_t yRel) override
Notify of mouse motion.
Definition Client.cpp:281
virtual void handshakeComplete()
Notify of handshake complete.
Definition Client.cpp:165
Client(Client &&)=delete
void refuseConnection(const char *msg)
Refuse connection.
Definition Client.cpp:153
std::string getName() const override
Get client name.
Definition Client.cpp:330
void keyRepeat(KeyID, KeyModifierMask, int32_t count, KeyButton, const std::string &lang) override
Notify of key repeat.
Definition Client.cpp:256
void screensaver(bool activate) override
Notify of screen saver change.
Definition Client.cpp:291
void setOptions(const OptionsList &options) override
Notify of options changes.
Definition Client.cpp:301
Client(IEventQueue *events, const std::string &name, const NetworkAddress &address, ISocketFactory *socketFactory, deskflow::Screen *screen, deskflow::ClientArgs const &args)
Definition Client.cpp:46
void connect(size_t addressIndex=0)
Connect to server.
Definition Client.cpp:91
void disconnect(const char *msg)
Disconnect.
Definition Client.cpp:142
bool getClipboard(ClipboardID id, IClipboard *) const override
Get clipboard.
Definition Client.cpp:192
Client(Client const &)=delete
void mouseWheel(int32_t xDelta, int32_t yDelta) override
Notify of mouse wheel motion.
Definition Client.cpp:286
NetworkAddress getServerAddress() const
Get address of server.
Definition Client.cpp:182
void mouseMove(int32_t xAbs, int32_t yAbs) override
Notify of mouse motion.
Definition Client.cpp:276
void keyDown(KeyID, KeyModifierMask, KeyButton, const std::string &) override
Notify of key press.
Definition Client.cpp:251
void mouseUp(ButtonID) override
Notify of mouse release.
Definition Client.cpp:271
void setClipboardDirty(ClipboardID, bool) override
Mark clipboard dirty.
Definition Client.cpp:246
void mouseDown(ButtonID) override
Notify of mouse press.
Definition Client.cpp:266
bool isConnecting() const
Test if connecting.
Definition Client.cpp:177
bool isConnected() const
Test if connected.
Definition Client.cpp:172
void setClipboard(ClipboardID, const IClipboard *) override
Set clipboard.
Definition Client.cpp:232
void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override
Get screen shape.
Definition Client.cpp:197
void * getEventTarget() const final
Get event target.
Definition Client.cpp:187
size_t getLastResolvedAddressesCount() const
Return last resolved adresses count.
Definition Client.h:126
Client & operator=(Client &&)=delete
bool leave() override
Leave screen.
Definition Client.cpp:214
void getCursorPos(int32_t &x, int32_t &y) const override
Get cursor position.
Definition Client.cpp:202
~Client() override
Definition Client.cpp:79
Client & operator=(Client const &)=delete
Definition SimpleEventQueueBuffer.cpp:13
Event.
Definition Event.h:27
Client interface.
Definition IClient.h:24
Clipboard interface.
Definition IClipboard.h:20
Data stream socket interface.
Definition IDataSocket.h:20
Event queue interface.
Definition IEventQueue.h:32
Definition INode.h:13
Socket factory.
Definition ISocketFactory.h:24
Network address type.
Definition NetworkAddress.h:18
Definition Screen.h:26
Proxy for server.
Definition ServerProxy.h:31
TCP data socket.
Definition TCPSocket.h:27
Thread handle.
Definition Thread.h:33
Definition ClientArgs.h:19
Bidirectional stream interface.
Definition IStream.h:24
Platform independent screen.
Definition Screen.h:30
Definition EventTypes.h:11
EventTypes
Definition EventTypes.h:13
Definition Config.h:29