00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CCLIENTPROXY1_0_H
00016 #define CCLIENTPROXY1_0_H
00017
00018 #include "CClientProxy.h"
00019 #include "CClipboard.h"
00020 #include "ProtocolTypes.h"
00021
00022 class CEvent;
00023 class CEventQueueTimer;
00024
00026 class CClientProxy1_0 : public CClientProxy {
00027 public:
00028 CClientProxy1_0(const CString& name, IStream* adoptedStream);
00029 ~CClientProxy1_0();
00030
00031
00032 virtual bool getClipboard(ClipboardID id, IClipboard*) const;
00033 virtual void getShape(SInt32& x, SInt32& y,
00034 SInt32& width, SInt32& height) const;
00035 virtual void getCursorPos(SInt32& x, SInt32& y) const;
00036
00037
00038 virtual void enter(SInt32 xAbs, SInt32 yAbs,
00039 UInt32 seqNum, KeyModifierMask mask,
00040 bool forScreensaver);
00041 virtual bool leave();
00042 virtual void setClipboard(ClipboardID, const IClipboard*);
00043 virtual void grabClipboard(ClipboardID);
00044 virtual void setClipboardDirty(ClipboardID, bool);
00045 virtual void keyDown(KeyID, KeyModifierMask, KeyButton);
00046 virtual void keyRepeat(KeyID, KeyModifierMask,
00047 SInt32 count, KeyButton);
00048 virtual void keyUp(KeyID, KeyModifierMask, KeyButton);
00049 virtual void mouseDown(ButtonID);
00050 virtual void mouseUp(ButtonID);
00051 virtual void mouseMove(SInt32 xAbs, SInt32 yAbs);
00052 virtual void mouseRelativeMove(SInt32 xRel, SInt32 yRel);
00053 virtual void mouseWheel(SInt32 xDelta, SInt32 yDelta);
00054 virtual void screensaver(bool activate);
00055 virtual void resetOptions();
00056 virtual void setOptions(const COptionsList& options);
00057
00058 protected:
00059 virtual bool parseHandshakeMessage(const UInt8* code);
00060 virtual bool parseMessage(const UInt8* code);
00061
00062 virtual void resetHeartbeatRate();
00063 virtual void setHeartbeatRate(double rate, double alarm);
00064 virtual void resetHeartbeatTimer();
00065 virtual void addHeartbeatTimer();
00066 virtual void removeHeartbeatTimer();
00067
00068 private:
00069 void disconnect();
00070 void removeHandlers();
00071
00072 void handleData(const CEvent&, void*);
00073 void handleDisconnect(const CEvent&, void*);
00074 void handleWriteError(const CEvent&, void*);
00075 void handleFlatline(const CEvent&, void*);
00076
00077 bool recvInfo();
00078 bool recvClipboard();
00079 bool recvGrabClipboard();
00080
00081 private:
00082 typedef bool (CClientProxy1_0::*MessageParser)(const UInt8*);
00083 struct CClientClipboard {
00084 public:
00085 CClientClipboard();
00086
00087 public:
00088 CClipboard m_clipboard;
00089 UInt32 m_sequenceNumber;
00090 bool m_dirty;
00091 };
00092
00093 CClientInfo m_info;
00094 CClientClipboard m_clipboard[kClipboardEnd];
00095 double m_heartbeatAlarm;
00096 CEventQueueTimer* m_heartbeatTimer;
00097 MessageParser m_parser;
00098 };
00099
00100 #endif