mirror of
https://github.com/deskflow/deskflow.git
synced 2026-07-04 21:04:59 +08:00
104 lines
3.4 KiB
C++
104 lines
3.4 KiB
C++
/*
|
|
* Deskflow -- mouse and keyboard sharing utility
|
|
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
|
|
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
|
|
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
|
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "deskflow/Clipboard.h"
|
|
#include "deskflow/ProtocolTypes.h"
|
|
#include "server/ClientProxy.h"
|
|
|
|
class Event;
|
|
class EventQueueTimer;
|
|
class IEventQueue;
|
|
|
|
//! Proxy for client implementing protocol version 1.0
|
|
class ClientProxy1_0 : public ClientProxy
|
|
{
|
|
public:
|
|
ClientProxy1_0(const std::string &name, deskflow::IStream *adoptedStream, IEventQueue *events);
|
|
ClientProxy1_0(ClientProxy1_0 const &) = delete;
|
|
ClientProxy1_0(ClientProxy1_0 &&) = delete;
|
|
~ClientProxy1_0() override;
|
|
|
|
ClientProxy1_0 &operator=(ClientProxy1_0 const &) = delete;
|
|
ClientProxy1_0 &operator=(ClientProxy1_0 &&) = delete;
|
|
|
|
// IScreen
|
|
bool getClipboard(ClipboardID id, IClipboard *) const override;
|
|
void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override;
|
|
void getCursorPos(int32_t &x, int32_t &y) const override;
|
|
|
|
// IClient overrides
|
|
void enter(int32_t xAbs, int32_t yAbs, uint32_t seqNum, KeyModifierMask mask, bool forScreensaver) override;
|
|
bool leave() override;
|
|
void setClipboard(ClipboardID, const IClipboard *) override;
|
|
void grabClipboard(ClipboardID) override;
|
|
void setClipboardDirty(ClipboardID, bool) override;
|
|
void keyDown(KeyID, KeyModifierMask, KeyButton, const std::string &) override;
|
|
void keyRepeat(KeyID, KeyModifierMask, int32_t count, KeyButton, const std::string &) override;
|
|
void keyUp(KeyID, KeyModifierMask, KeyButton) override;
|
|
void mouseDown(ButtonID) override;
|
|
void mouseUp(ButtonID) override;
|
|
void mouseMove(int32_t xAbs, int32_t yAbs) override;
|
|
void mouseRelativeMove(int32_t xRel, int32_t yRel) override;
|
|
void mouseWheel(int32_t xDelta, int32_t yDelta) override;
|
|
void screensaver(bool activate) override;
|
|
void resetOptions() override;
|
|
void setOptions(const OptionsList &options) override;
|
|
void sendDragInfo(uint32_t fileCount, const char *info, size_t size) override;
|
|
void fileChunkSending(uint8_t mark, char *data, size_t dataSize) override;
|
|
std::string getSecureInputApp() const override;
|
|
void secureInputNotification(const std::string &app) const override;
|
|
|
|
protected:
|
|
virtual bool parseHandshakeMessage(const uint8_t *code);
|
|
virtual bool parseMessage(const uint8_t *code);
|
|
|
|
virtual void resetHeartbeatRate();
|
|
virtual void setHeartbeatRate(double rate, double alarm);
|
|
virtual void resetHeartbeatTimer();
|
|
virtual void addHeartbeatTimer();
|
|
virtual void removeHeartbeatTimer();
|
|
virtual bool recvClipboard();
|
|
|
|
private:
|
|
void disconnect();
|
|
void removeHandlers();
|
|
|
|
void handleData();
|
|
void handleDisconnect();
|
|
void handleWriteError();
|
|
void handleFlatline();
|
|
|
|
bool recvInfo();
|
|
bool recvGrabClipboard();
|
|
|
|
protected:
|
|
struct ClientClipboard
|
|
{
|
|
public:
|
|
ClientClipboard() = default;
|
|
|
|
public:
|
|
Clipboard m_clipboard;
|
|
uint32_t m_sequenceNumber = 0;
|
|
bool m_dirty = true;
|
|
};
|
|
|
|
ClientClipboard m_clipboard[kClipboardEnd];
|
|
|
|
private:
|
|
using MessageParser = bool (ClientProxy1_0::*)(const uint8_t *);
|
|
|
|
ClientInfo m_info;
|
|
double m_heartbeatAlarm;
|
|
EventQueueTimer *m_heartbeatTimer = nullptr;
|
|
MessageParser m_parser = &ClientProxy1_0::parseHandshakeMessage;
|
|
IEventQueue *m_events;
|
|
};
|