diff options
author | Manuel Schneider | 2014-05-22 11:41:31 +0200 |
---|---|---|
committer | Manuel Schneider | 2014-05-22 11:44:19 +0200 |
commit | b2dd6e8b0b86446cb4d3f32403b029ee2496cc11 (patch) | |
tree | 7791fd2792b4c3ee4acb1b22c6b8bbeb20b55601 /src/server/net | |
parent | [Client] Make setTutor inline and drop the communication stuff since the clie... (diff) | |
download | pvs2-b2dd6e8b0b86446cb4d3f32403b029ee2496cc11.tar.gz pvs2-b2dd6e8b0b86446cb4d3f32403b029ee2496cc11.tar.xz pvs2-b2dd6e8b0b86446cb4d3f32403b029ee2496cc11.zip |
Fix segfault. Drop nullpointer polls since SslSocket is now const. [id == _VNCCLIENT] Logical reduction. Cleanup header.
Diffstat (limited to 'src/server/net')
-rw-r--r-- | src/server/net/client.cpp | 39 | ||||
-rw-r--r-- | src/server/net/client.h | 51 |
2 files changed, 40 insertions, 50 deletions
diff --git a/src/server/net/client.cpp b/src/server/net/client.cpp index 3859f06..67b25b2 100644 --- a/src/server/net/client.cpp +++ b/src/server/net/client.cpp @@ -56,12 +56,8 @@ Client::Client(QSslSocket* socket) : _socket(socket) /******************************************************************************/ Client::~Client() { - if (_socket != NULL) - { - qCritical("**** SOCKET DELETE IN DESTRUCTOR"); - _socket->deleteLater(); - } - qDebug("*** Client %s destroyed.", qPrintable(_socket->peerAddress().toString())); + qDebug() << "*** Client" << _host << " destroyed."; + _socket->deleteLater(); } /******************************************************************************/ @@ -90,7 +86,7 @@ void Client::timerEvent(QTimerEvent* event) /******************************************************************************/ void Client::sendMessage(NetworkMessage& message) { - if (_socket == NULL || _socket->state() != QAbstractSocket::ConnectedState) + if (_socket->state() != QAbstractSocket::ConnectedState) return; message.writeMessage(_socket); if (!message.writeComplete()) @@ -102,7 +98,7 @@ void Client::sendMessage(NetworkMessage& message) /******************************************************************************/ void Client::requestThumb(const int width, const int height) { - if (_socket == NULL || _socket->state() != QAbstractSocket::ConnectedState) + if (_socket->state() != QAbstractSocket::ConnectedState) { qDebug("requestThumb called in bad state"); return; @@ -118,13 +114,12 @@ void Client::requestThumb(const int width, const int height) void Client::onDataArrival() { // - if (_socket == NULL || _socket->state() != QAbstractSocket::ConnectedState) + if (_socket->state() != QAbstractSocket::ConnectedState) { qDebug("dataArrival called in bad state"); return; } - //qDebug() << _socket->bytesAvailable() << " bytes to read"; bool ret; while (_socket->bytesAvailable()) { @@ -138,8 +133,6 @@ void Client::onDataArrival() { this->handleMsg(); _fromClient.reset(); - if (_socket == NULL) - return; } } } @@ -198,26 +191,25 @@ void Client::handleMsg() { // Client tells us that it started or stopped displaying a remote screen via VNC _activeVncClient = (_fromClient.getFieldString("ENABLED").toInt() != 0); - const int other = (int)_fromClient.getFieldString("CLIENTID").toInt(); + const int projectionSource = (int)_fromClient.getFieldString("CLIENTID").toInt(); - const int last = _activeVncClient ? _currentProjectionSource : other; - - if (!_activeVncClient) + if (_activeVncClient) { - if (other == _desiredProjectionSource) + qDebug() << "Client " << _name << " started its VNC client (watching " << projectionSource << ")"; + if (projectionSource == _desiredProjectionSource) _desiredProjectionSource = 0; - _currentProjectionSource = 0; - qDebug() << "Client " << _name << " stopped its VNC client (watched " << last << ")"; + emit vncClientStateChange(this, _currentProjectionSource); + _currentProjectionSource = projectionSource; } else { - if (other == _desiredProjectionSource) + qDebug() << "Client " << _name << " stopped its VNC client (watched " << projectionSource << ")"; + if (projectionSource == _desiredProjectionSource) _desiredProjectionSource = 0; - _currentProjectionSource = other; - qDebug() << "Client " << _name << " started its VNC client (watching " << other << ")"; + emit vncClientStateChange(this, _currentProjectionSource); + _currentProjectionSource = 0; } - emit vncClientStateChange(this, last); } return; } @@ -339,7 +331,6 @@ void Client::disconnect() qDebug("*** Client %s disconnected.", qPrintable(_socket->peerAddress().toString())); _socket->blockSignals(true); _socket->abort(); - _socket->deleteLater(); this->deleteLater(); emit disconnected(); } diff --git a/src/server/net/client.h b/src/server/net/client.h index 389d05c..c148e76 100644 --- a/src/server/net/client.h +++ b/src/server/net/client.h @@ -46,16 +46,20 @@ public: inline const int id() const { return _id; } inline const int desiredProjectionSource() const { return _desiredProjectionSource; } inline const int currentProjectionSource() const { return _currentProjectionSource; } + // To be replaced by states + inline const bool isActiveVncClient() const { return _activeVncClient; } + inline const bool isActiveVncServer() const { return _vncPort > 0; } + inline const bool isProjectionSource() const { return _isProjectionSource; } // Setters inline void setProjectionSource(bool enable) { _isProjectionSource = enable; } inline void setDesiredProjectionSource(int source) { _desiredProjectionSource = source; } inline void setTutor(bool enable){ _isTutor = enable; } - // To be replaced by states - inline const bool isActiveVncClient() const { return _activeVncClient; } - inline const bool isActiveVncServer() const { return _vncPort > 0; } - inline const bool isProjectionSource() const { return _isProjectionSource; } + + //New ones +//b void startVncServer(); + //Send message stuff @@ -69,29 +73,24 @@ public: private: QSslSocket * const _socket; - State _state; - - static int _clientIdCounter; - 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; + State _state; + 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 - // If this client should be projected to from another client, the other - // client's id is set here. 0 otherwise. This is not currently used and it is - // questionable if this makes sense, as it might just be confusing if several - // groups students watch different other students. Also, visualizing such a - // situation in the GUI in a meaningful way would be hard. - int _desiredProjectionSource; - bool _isProjectionSource; // Tells whether this client is currently the VNC broadcast source. - int _currentProjectionSource; - QString _vncRwPass, _vncRoPass; - int _vncPort; // VNCserver state. Greater 0 -> active on this port. Equals 0 -> no server. - bool _activeVncClient; // Flag indicating that the client is displaying a remote screen via VNC - bool _isTutor; // Flag indicating that the client has been set as a tutor + int _timerIdAuthTimeout, _timerPingTimeout; + int _id; // this client's unique id + int _desiredProjectionSource; + bool _isProjectionSource; // Tells whether this client is currently the VNC broadcast source. + int _currentProjectionSource; + QString _vncRwPass, _vncRoPass; + int _vncPort; // VNCserver state. Greater 0 -> active on this port. Equals 0 -> no server. + bool _activeVncClient; // Flag 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); |