mirror of
https://github.com/debauchee/barrier.git
synced 2026-02-11 06:05:08 +08:00
screens into CPrimaryScreen and merged common code from secondary screens into CSecondaryScreen. changed is-a relationship to a has-a between the primary and secondary screen classes and the generic platform dependent screen class to avoid multiple inheritance of implementation. also standardized the interface for those generic screen classes. adding a platform now involves implementing simpler interfaces: IScreen for the generic screen, IScreenEventHandler and some methods of CPrimaryScreen for the primary screen, and IScreenEventHandler and some methods of CSecondaryScreen for the secondary screen. did X11 platform but not win32 platform.
102 lines
2.9 KiB
C++
102 lines
2.9 KiB
C++
#ifndef CCLIENT_H
|
|
#define CCLIENT_H
|
|
|
|
#include "IScreenReceiver.h"
|
|
#include "IClient.h"
|
|
#include "IClipboard.h"
|
|
#include "CNetworkAddress.h"
|
|
#include "CMutex.h"
|
|
|
|
class CSecondaryScreen;
|
|
class CServerProxy;
|
|
class CThread;
|
|
class IDataSocket;
|
|
class IScreenReceiver;
|
|
|
|
class CClient : public IScreenReceiver, public IClient {
|
|
public:
|
|
CClient(const CString& clientName);
|
|
~CClient();
|
|
|
|
// manipulators
|
|
|
|
// turn camping on or off. when camping the client will keep
|
|
// trying to connect to the server until it succeeds. this
|
|
// is useful if the client may start before the server. do
|
|
// not call this while in run().
|
|
void camp(bool on);
|
|
|
|
// set the server's address that the client should connect to
|
|
void setAddress(const CNetworkAddress& serverAddress);
|
|
|
|
// tell client to exit run() gracefully. this must only be called
|
|
// after a successful open().
|
|
void quit();
|
|
|
|
// accessors
|
|
|
|
// returns true if the server rejected us
|
|
bool wasRejected() const;
|
|
|
|
// IScreenReceiver overrides
|
|
virtual void onInfoChanged(const CClientInfo&);
|
|
virtual bool onGrabClipboard(ClipboardID);
|
|
virtual void onClipboardChanged(ClipboardID, const CString&);
|
|
|
|
// IClient overrides
|
|
virtual bool open();
|
|
virtual void run();
|
|
virtual void close();
|
|
// FIXME -- can we avoid passing everything here?
|
|
virtual void enter(SInt32 xAbs, SInt32 yAbs,
|
|
UInt32 seqNum, KeyModifierMask mask,
|
|
bool forScreensaver);
|
|
virtual bool leave();
|
|
virtual void setClipboard(ClipboardID, const CString&);
|
|
virtual void grabClipboard(ClipboardID);
|
|
virtual void setClipboardDirty(ClipboardID, bool dirty);
|
|
virtual void keyDown(KeyID, KeyModifierMask);
|
|
virtual void keyRepeat(KeyID, KeyModifierMask, SInt32 count);
|
|
virtual void keyUp(KeyID, KeyModifierMask);
|
|
virtual void mouseDown(ButtonID);
|
|
virtual void mouseUp(ButtonID);
|
|
virtual void mouseMove(SInt32 xAbs, SInt32 yAbs);
|
|
virtual void mouseWheel(SInt32 delta);
|
|
virtual void screensaver(bool activate);
|
|
virtual CString getName() const;
|
|
virtual SInt32 getJumpZoneSize() const;
|
|
virtual void getShape(SInt32& x, SInt32& y,
|
|
SInt32& width, SInt32& height) const;
|
|
virtual void getCursorPos(SInt32& x, SInt32& y) const;
|
|
virtual void getCursorCenter(SInt32& x, SInt32& y) const;
|
|
|
|
private:
|
|
// open/close the secondary screen
|
|
void openSecondaryScreen();
|
|
void closeSecondaryScreen();
|
|
|
|
// send the clipboard to the server
|
|
void sendClipboard(ClipboardID);
|
|
|
|
// handle server messaging
|
|
void runSession(void*);
|
|
void deleteSession(CThread*);
|
|
void runServer();
|
|
CServerProxy* handshakeServer(IDataSocket*);
|
|
|
|
private:
|
|
CMutex m_mutex;
|
|
CString m_name;
|
|
CSecondaryScreen* m_screen;
|
|
IScreenReceiver* m_server;
|
|
CNetworkAddress m_serverAddress;
|
|
bool m_camp;
|
|
bool m_active;
|
|
bool m_rejected;
|
|
bool m_ownClipboard[kClipboardEnd];
|
|
IClipboard::Time m_timeClipboard[kClipboardEnd];
|
|
CString m_dataClipboard[kClipboardEnd];
|
|
};
|
|
|
|
#endif
|