#ifndef CLIENT_H_ #define CLIENT_H_ #include #include #include #include #include #include "../../shared/networkmessage.h" //class QSslSocket; struct ClientLogin { bool accept; QString name; QString host; QString ip; }; class Client : public QObject { Q_OBJECT public: explicit Client(QSslSocket* socket); ~Client(); // Getters inline const bool isAuthed() const { return _authed == 2; } inline const QString& name() const { return _name; } inline const QString& host() const { return _host; } inline const QString ip() const { return _socket->peerAddress().toString(); } inline const int id() const { return _id; } inline const int currentProjectionSource() const { return _currentProjectionSource; } inline const bool isActiveVncClient() const { return _currentProjectionSource > 0; } inline const bool isActiveVncServer() const { return _vncPort > 0; } inline const bool isLocked() const { return _locked; } // Setters inline void setTutor(bool enable){ _isTutor = enable; } //Send message stuff void startVncServer(); void stopVncServer(); void startVncClient(Client const * const to ); void stopVncClient(); void lockScreen(bool); void requestThumb(const int width, const int height); private: QSslSocket * const _socket; bool _locked; int _authed; // 0 = challenge sent, awaiting reply 1 = challenge ok, client challenge replied, awaiting login, 2 = ESTABLISHED QString _name; QString _host; QByteArray _challenge; qint64 _pingTimeout; NetworkMessage _fromClient; int _timerIdAuthTimeout, _timerPingTimeout; int _id; // this client's unique id QString _vncRwPass, _vncRoPass; int _vncPort; // VNCserver state. Greater 0 -> active on this port. Equals 0 -> no server. int _currentProjectionSource; // VNCclient state. indicating that the client is displaying a remote screen via VNC bool _isTutor; // Flag indicating that the client has been set as a tutor static int _clientIdCounter; void handleMsg(); void sendMessage(NetworkMessage& message); protected: void timerEvent(QTimerEvent* event); signals: void authenticating(Client* client, ClientLogin* request); void authenticated(Client* client); void thumbUpdated(Client* client, const QPixmap& thumb); void vncServerStateChange(Client* client); void vncClientStateChange(Client* client); void stateChanged(); void disconnected(); private slots: void onDataArrival(); // triggered if data is available for reading void disconnect(); }; #endif /* CLIENT_H_ */