diff options
-rw-r--r-- | src/client/jsondb-client.cpp | 48 | ||||
-rw-r--r-- | src/client/jsondb-client.h | 15 | ||||
-rw-r--r-- | src/client/jsondb-client_p.h | 3 | ||||
-rw-r--r-- | tools/jsondb-client/client.cpp | 7 |
4 files changed, 65 insertions, 8 deletions
diff --git a/src/client/jsondb-client.cpp b/src/client/jsondb-client.cpp index 9ce6eeff..eb820661 100644 --- a/src/client/jsondb-client.cpp +++ b/src/client/jsondb-client.cpp @@ -208,8 +208,12 @@ void JsonDbClientPrivate::_q_statusChanged() if (status != JsonDbClient::Error) { requestQueue.unite(sentRequestQueue); sentRequestQueue.clear(); - newStatus = JsonDbClient::Connecting; - QTimer::singleShot(5000, q, SLOT(_q_timeout())); + if (autoReconnect) { + newStatus = JsonDbClient::Connecting; + QTimer::singleShot(5000, q, SLOT(_q_timeout())); + } else { + newStatus = JsonDbClient::Error; + } } break; case JsonDbConnection::Connecting: @@ -949,6 +953,46 @@ JsonDbChangesSince *JsonDbClient::changesSince() } /*! + \property JsonDbClient::autoReconnect + + \brief Specifies whether to reconnect when server connection is lost. +*/ +void JsonDbClient::setAutoReconnect(bool reconnect) +{ + Q_D(JsonDbClient); + d->autoReconnect = reconnect; +} + +bool JsonDbClient::autoReconnect() const +{ + return d_func()->autoReconnect; +} + +/*! + Connects to the server if not connected. + \sa autoReconnect(), disconnectFromServer() +*/ +void JsonDbClient::connectToServer() +{ + Q_D(JsonDbClient); + if (d->status == JsonDbClient::Connecting || d->status == JsonDbClient::Ready) + return; + d->connection->connectToServer(); +} + +/*! + Disconnects to the server if connected. + \sa autoReconnect(), connectToServer() +*/ +void JsonDbClient::disconnectFromServer() +{ + Q_D(JsonDbClient); + if (d->status != JsonDbClient::Ready) + return; + d->connection->disconnectFromServer(); +} + +/*! \fn void JsonDbClient::notified(const QString ¬ifyUuid, const JsonDbNotification ¬ification) Signal that a notification has been received. The notification object must diff --git a/src/client/jsondb-client.h b/src/client/jsondb-client.h index 2b592185..b0c3c692 100644 --- a/src/client/jsondb-client.h +++ b/src/client/jsondb-client.h @@ -67,6 +67,7 @@ class Q_ADDON_JSONDB_EXPORT JsonDbClient : public QObject { Q_OBJECT Q_PROPERTY(Status status READ status NOTIFY statusChanged) + Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) public: JsonDbClient(const QString &socketName, QObject *parent = 0); JsonDbClient(QObject *parent = 0); @@ -85,13 +86,19 @@ public: Q_DECLARE_FLAGS(NotifyTypes, NotifyType) enum Status { - Null, - Connecting, - Ready, - Error + Null = 0, + Connecting = 1, + Ready = 2, + Error = 3 }; Status status() const; + void setAutoReconnect(bool reconnect); + bool autoReconnect() const; + + void connectToServer(); + void disconnectFromServer(); + public slots: QT_DEPRECATED int find(const QsonObject &query, QObject *target = 0, const char *successSlot = 0, const char *errorSlot = 0); diff --git a/src/client/jsondb-client_p.h b/src/client/jsondb-client_p.h index a003b310..e65db614 100644 --- a/src/client/jsondb-client_p.h +++ b/src/client/jsondb-client_p.h @@ -63,7 +63,7 @@ class JsonDbClientPrivate Q_DECLARE_PUBLIC(JsonDbClient) public: JsonDbClientPrivate(JsonDbClient *q) - : q_ptr(q), connection(0) + : q_ptr(q), connection(0), status(JsonDbClient::Null), autoReconnect(true) { } ~JsonDbClientPrivate() @@ -80,6 +80,7 @@ public: JsonDbConnection *connection; JsonDbClient::Status status; + bool autoReconnect; QMap<int, QVariantMap> requestQueue; QMap<int, QVariantMap> sentRequestQueue; diff --git a/tools/jsondb-client/client.cpp b/tools/jsondb-client/client.cpp index 70197e02..c45616b9 100644 --- a/tools/jsondb-client/client.cpp +++ b/tools/jsondb-client/client.cpp @@ -321,7 +321,8 @@ void Client::usage() { std::stringstream out; out << "Valid commands:" << std::endl - << std::endl + << " connect" << std::endl + << " disconnect" << std::endl << "Direct database commands - these take an explict object" << std::endl << " create [partition:<name>] OBJECT" << std::endl << " update [partition:<name>] OBJECT" << std::endl @@ -490,6 +491,10 @@ bool Client::processCommand(const QString &command) qDebug() << "Sending changesSince: " << stateNumber << "types: " << types; mRequests << mConnection->changesSince(stateNumber, types, partition); + } else if (cmd == "connect") { + mConnection->connectToServer(); + } else if (cmd == "disconnect") { + mConnection->disconnectFromServer(); } else if (!cmd.isEmpty()) { InputThread::print("Unrecognized command: " % cmd); usage(); |