Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ClientProxy1_0.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/Clipboard.h"
13#include "server/ClientProxy.h"
14
15class Event;
16class EventQueueTimer;
17class IEventQueue;
18
21{
22public:
23 ClientProxy1_0(const std::string &name, deskflow::IStream *adoptedStream, IEventQueue *events);
24 ClientProxy1_0(ClientProxy1_0 const &) = delete;
26 ~ClientProxy1_0() override;
27
30
31 // IScreen
32 bool getClipboard(ClipboardID id, IClipboard *) const override;
33 void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override;
34 void getCursorPos(int32_t &x, int32_t &y) const override;
35
36 // IClient overrides
37 void enter(int32_t xAbs, int32_t yAbs, uint32_t seqNum, KeyModifierMask mask, bool forScreensaver) override;
38 bool leave() override;
39 void setClipboard(ClipboardID, const IClipboard *) override;
40 void grabClipboard(ClipboardID) override;
41 void setClipboardDirty(ClipboardID, bool) override;
42 void keyDown(KeyID, KeyModifierMask, KeyButton, const std::string &) override;
43 void keyRepeat(KeyID, KeyModifierMask, int32_t count, KeyButton, const std::string &) override;
44 void keyUp(KeyID, KeyModifierMask, KeyButton) override;
45 void mouseDown(ButtonID) override;
46 void mouseUp(ButtonID) override;
47 void mouseMove(int32_t xAbs, int32_t yAbs) override;
48 void mouseRelativeMove(int32_t xRel, int32_t yRel) override;
49 void mouseWheel(int32_t xDelta, int32_t yDelta) override;
50 void screensaver(bool activate) override;
51 void resetOptions() override;
52 void setOptions(const OptionsList &options) override;
53 void sendDragInfo(uint32_t fileCount, const char *info, size_t size) override;
54 void fileChunkSending(uint8_t mark, char *data, size_t dataSize) override;
55 std::string getSecureInputApp() const override;
56 void secureInputNotification(const std::string &app) const override;
57
58protected:
59 virtual bool parseHandshakeMessage(const uint8_t *code);
60 virtual bool parseMessage(const uint8_t *code);
61
62 virtual void resetHeartbeatRate();
63 virtual void setHeartbeatRate(double rate, double alarm);
64 virtual void resetHeartbeatTimer();
65 virtual void addHeartbeatTimer();
66 virtual void removeHeartbeatTimer();
67 virtual bool recvClipboard();
68
69private:
70 void disconnect();
71 void removeHandlers();
72
73 void handleData();
74 void handleDisconnect();
75 void handleWriteError();
76 void handleFlatline();
77
78 bool recvInfo();
79 bool recvGrabClipboard();
80
81protected:
83 {
84 public:
85 ClientClipboard() = default;
86
87 public:
89 uint32_t m_sequenceNumber = 0;
90 bool m_dirty = true;
91 };
92
94
95private:
96 using MessageParser = bool (ClientProxy1_0::*)(const uint8_t *);
97
98 ClientInfo m_info;
99 double m_heartbeatAlarm;
100 EventQueueTimer *m_heartbeatTimer = nullptr;
101 MessageParser m_parser = &ClientProxy1_0::parseHandshakeMessage;
102 IEventQueue *m_events;
103};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
static int void FAR * data
Definition ArchNetworkWinsock.cpp:34
static const ClipboardID kClipboardEnd
Definition ClipboardTypes.h:30
uint8_t ClipboardID
Clipboard ID.
Definition ClipboardTypes.h:16
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
Deskflow Network Protocol Specification and Implementation.
int y
Definition ServerConfig.cpp:27
int x
Definition ServerConfig.cpp:26
Client screen information structure.
Definition ProtocolTypes.h:1326
void mouseDown(ButtonID) override
Notify of mouse press.
Definition ClientProxy1_0.cpp:278
void setClipboard(ClipboardID, const IClipboard *) override
Set clipboard.
Definition ClientProxy1_0.cpp:241
ClientProxy1_0 & operator=(ClientProxy1_0 const &)=delete
virtual void resetHeartbeatRate()
Definition ClientProxy1_0.cpp:98
void sendDragInfo(uint32_t fileCount, const char *info, size_t size) override
Definition ClientProxy1_0.cpp:308
void getCursorPos(int32_t &x, int32_t &y) const override
Get cursor position.
Definition ClientProxy1_0.cpp:219
ClientClipboard m_clipboard[kClipboardEnd]
Definition ClientProxy1_0.h:93
void setClipboardDirty(ClipboardID, bool) override
Mark clipboard dirty.
Definition ClientProxy1_0.cpp:255
virtual bool recvClipboard()
Definition ClientProxy1_0.cpp:407
ClientProxy1_0(ClientProxy1_0 &&)=delete
ClientProxy1_0(const std::string &name, deskflow::IStream *adoptedStream, IEventQueue *events)
Definition ClientProxy1_0.cpp:23
virtual bool parseMessage(const uint8_t *code)
Definition ClientProxy1_0.cpp:166
virtual void resetHeartbeatTimer()
Definition ClientProxy1_0.cpp:91
void enter(int32_t xAbs, int32_t yAbs, uint32_t seqNum, KeyModifierMask mask, bool forScreensaver) override
Enter screen.
Definition ClientProxy1_0.cpp:226
void screensaver(bool activate) override
Notify of screen saver change.
Definition ClientProxy1_0.cpp:333
void mouseMove(int32_t xAbs, int32_t yAbs) override
Notify of mouse motion.
Definition ClientProxy1_0.cpp:290
virtual void removeHeartbeatTimer()
Definition ClientProxy1_0.cpp:83
ClientProxy1_0(ClientProxy1_0 const &)=delete
virtual void addHeartbeatTimer()
Definition ClientProxy1_0.cpp:76
void keyUp(KeyID, KeyModifierMask, KeyButton) override
Notify of key release.
Definition ClientProxy1_0.cpp:272
void fileChunkSending(uint8_t mark, char *data, size_t dataSize) override
Definition ClientProxy1_0.cpp:314
virtual void setHeartbeatRate(double rate, double alarm)
Definition ClientProxy1_0.cpp:103
void mouseRelativeMove(int32_t xRel, int32_t yRel) override
Notify of mouse motion.
Definition ClientProxy1_0.cpp:296
void keyRepeat(KeyID, KeyModifierMask, int32_t count, KeyButton, const std::string &) override
Notify of key repeat.
Definition ClientProxy1_0.cpp:266
void mouseUp(ButtonID) override
Notify of mouse release.
Definition ClientProxy1_0.cpp:284
void grabClipboard(ClipboardID) override
Grab clipboard.
Definition ClientProxy1_0.cpp:246
ClientProxy1_0 & operator=(ClientProxy1_0 &&)=delete
bool leave() override
Leave screen.
Definition ClientProxy1_0.cpp:232
void resetOptions() override
Notify of options changes.
Definition ClientProxy1_0.cpp:339
virtual bool parseHandshakeMessage(const uint8_t *code)
Definition ClientProxy1_0.cpp:148
~ClientProxy1_0() override
Definition ClientProxy1_0.cpp:49
bool getClipboard(ClipboardID id, IClipboard *) const override
Get clipboard.
Definition ClientProxy1_0.cpp:205
void secureInputNotification(const std::string &app) const override
Definition ClientProxy1_0.cpp:327
void keyDown(KeyID, KeyModifierMask, KeyButton, const std::string &) override
Notify of key press.
Definition ClientProxy1_0.cpp:260
std::string getSecureInputApp() const override
Definition ClientProxy1_0.cpp:320
void setOptions(const OptionsList &options) override
Notify of options changes.
Definition ClientProxy1_0.cpp:350
void mouseWheel(int32_t xDelta, int32_t yDelta) override
Notify of mouse wheel motion.
Definition ClientProxy1_0.cpp:301
void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override
Get screen shape.
Definition ClientProxy1_0.cpp:211
ClientProxy(const std::string &name, deskflow::IStream *adoptedStream)
Definition ClientProxy.cpp:19
Memory buffer clipboard.
Definition Clipboard.h:17
Definition SimpleEventQueueBuffer.cpp:13
Event.
Definition Event.h:27
Clipboard interface.
Definition IClipboard.h:20
Event queue interface.
Definition IEventQueue.h:32
Bidirectional stream interface.
Definition IStream.h:24
Definition ClientProxy1_0.h:83
Clipboard m_clipboard
Definition ClientProxy1_0.h:88
uint32_t m_sequenceNumber
Definition ClientProxy1_0.h:89
bool m_dirty
Definition ClientProxy1_0.h:90