mirror of
https://gitlab.com/comunic/comunicwatcher
synced 2024-11-22 13:29:25 +00:00
Connect to WebSocket
This commit is contained in:
parent
a0ce9f2d7f
commit
e9d1bb6e61
@ -1,4 +1,4 @@
|
|||||||
QT += core gui widgets network
|
QT += core gui widgets network websockets
|
||||||
|
|
||||||
CONFIG += c++11
|
CONFIG += c++11
|
||||||
|
|
||||||
@ -20,7 +20,8 @@ SOURCES += \
|
|||||||
loginsuccessfuldialog.cpp \
|
loginsuccessfuldialog.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
loginwindow.cpp \
|
loginwindow.cpp \
|
||||||
refreshservice.cpp
|
refreshservice.cpp \
|
||||||
|
wsclient.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
accounthelper.h \
|
accounthelper.h \
|
||||||
@ -29,7 +30,8 @@ HEADERS += \
|
|||||||
config.h \
|
config.h \
|
||||||
loginsuccessfuldialog.h \
|
loginsuccessfuldialog.h \
|
||||||
loginwindow.h \
|
loginwindow.h \
|
||||||
refreshservice.h
|
refreshservice.h \
|
||||||
|
wsclient.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
loginsuccessfuldialog.ui \
|
loginsuccessfuldialog.ui \
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "accounthelper.h"
|
||||||
#include "apirequest.h"
|
#include "apirequest.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
@ -10,6 +11,13 @@ APIRequest::APIRequest(const QString &uri, QObject *parent) : QObject(parent), m
|
|||||||
{
|
{
|
||||||
addString("serviceName", API_SERVICE_NAME);
|
addString("serviceName", API_SERVICE_NAME);
|
||||||
addString("serviceToken", API_SERVICE_TOKEN);
|
addString("serviceToken", API_SERVICE_TOKEN);
|
||||||
|
|
||||||
|
addString("icognito", "true");
|
||||||
|
|
||||||
|
if(AccountHelper::SignedIn()) {
|
||||||
|
addString("userToken1", AccountHelper::GetLoginToken());
|
||||||
|
addString("userToken2", "dummy_data");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIRequest::addString(const QString &name, const QString &value)
|
void APIRequest::addString(const QString &name, const QString &value)
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "wsclient.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class RefreshService : public QObject
|
class RefreshService : public QObject
|
||||||
@ -22,4 +24,5 @@ private:
|
|||||||
|
|
||||||
// Class members
|
// Class members
|
||||||
static RefreshService *svc;
|
static RefreshService *svc;
|
||||||
|
WsClient client;
|
||||||
};
|
};
|
||||||
|
47
wsclient.cpp
Normal file
47
wsclient.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include "apirequest.h"
|
||||||
|
#include "wsclient.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
WsClient::WsClient(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
startConnect();
|
||||||
|
|
||||||
|
connect(&mWebSocket, &QWebSocket::connected, this, &WsClient::onConnected);
|
||||||
|
connect(&mWebSocket, &QWebSocket::disconnected, this, &WsClient::onConnectionError);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WsClient::startConnect()
|
||||||
|
{
|
||||||
|
// First, get an access token
|
||||||
|
APIRequest *r = new APIRequest("ws/token");
|
||||||
|
r->exec();
|
||||||
|
connect(r, &APIRequest::done, this, &WsClient::getTokenCallBack);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WsClient::onConnectionError()
|
||||||
|
{
|
||||||
|
qWarning("Connection error, trying again in 30 seconds...");
|
||||||
|
QTimer::singleShot(30000, this, &WsClient::startConnect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WsClient::getTokenCallBack(APIResponse res)
|
||||||
|
{
|
||||||
|
if(res.isError()) {
|
||||||
|
onConnectionError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine WebSocket URL
|
||||||
|
const auto token = res.getObject().value("token").toString();
|
||||||
|
const auto ws_url = QString(QString(API_SERVER_SCHEME) == "https" ? "wss" : "ws") + "://" + API_HOST + API_BASE_PATH + "ws?token=" + token;
|
||||||
|
qDebug() << "Connecting to " << ws_url;
|
||||||
|
|
||||||
|
mWebSocket.open(ws_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WsClient::onConnected()
|
||||||
|
{
|
||||||
|
qDebug() << "Connected to WebSocket";
|
||||||
|
}
|
36
wsclient.h
Normal file
36
wsclient.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* WebSocket client
|
||||||
|
*
|
||||||
|
* @author Pierre Hubert
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "apiresponse.h"
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QWebSocket>
|
||||||
|
|
||||||
|
class WsClient : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit WsClient(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void startConnect();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onConnectionError();
|
||||||
|
void getTokenCallBack(APIResponse res);
|
||||||
|
void onConnected();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Class members
|
||||||
|
QWebSocket mWebSocket;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user