mirror of
https://github.com/Sani7/remote-ui.git
synced 2026-10-27 06:01:14 +01:00
websocket
add ping pong to simbase, mainwindow and websocket wrapper
This commit is contained in:
@@ -19,6 +19,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setWindowTitle("Simulator Selector");
|
this->setWindowTitle("Simulator Selector");
|
||||||
|
|
||||||
|
m_error_dialog->set_error("Connection timed out\nCheck if the server is running");
|
||||||
|
|
||||||
//Default sim
|
//Default sim
|
||||||
//defaultSim("CVS_I10");
|
//defaultSim("CVS_I10");
|
||||||
|
|
||||||
@@ -37,6 +39,7 @@ void MainWindow::setup_cb(void)
|
|||||||
{
|
{
|
||||||
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=](json& j){on_cmd_cb(j);});
|
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=](json& j){on_cmd_cb(j);});
|
||||||
connect(m_web_socket, &Web_socket_wrapper::on_connected, this, [=]{m_web_socket->send_command(Web_socket_wrapper::Command::get_simulators);});
|
connect(m_web_socket, &Web_socket_wrapper::on_connected, this, [=]{m_web_socket->send_command(Web_socket_wrapper::Command::get_simulators);});
|
||||||
|
connect(m_web_socket, &Web_socket_wrapper::on_closed, this, [=]{m_error_dialog->open();});
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::showEvent( QShowEvent* event )
|
void MainWindow::showEvent( QShowEvent* event )
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ SimulatorBase::SimulatorBase(Web_socket_wrapper* web_socket, QWidget* parent) :
|
|||||||
m_error_dialog(new NetworkError(this))
|
m_error_dialog(new NetworkError(this))
|
||||||
{
|
{
|
||||||
this->m_web_socket = web_socket;
|
this->m_web_socket = web_socket;
|
||||||
|
m_error_dialog->set_error("Connection timed out\nCheck if the server is running");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimulatorBase::showEvent( QShowEvent* event )
|
void SimulatorBase::showEvent( QShowEvent* event )
|
||||||
@@ -33,6 +34,7 @@ void SimulatorBase::setup_cb(void)
|
|||||||
{
|
{
|
||||||
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=](json& j){on_cmd_cb(j);});
|
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=](json& j){on_cmd_cb(j);});
|
||||||
connect(m_web_socket, &Web_socket_wrapper::on_event_cb, this, [=](json& j){on_event_cb(j);});
|
connect(m_web_socket, &Web_socket_wrapper::on_event_cb, this, [=](json& j){on_event_cb(j);});
|
||||||
|
connect(m_web_socket, &Web_socket_wrapper::on_closed, this, [=]{m_error_dialog->open();});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimulatorBase::on_cmd_cb(json& j)
|
void SimulatorBase::on_cmd_cb(json& j)
|
||||||
|
|||||||
@@ -3,10 +3,20 @@
|
|||||||
|
|
||||||
Web_socket_wrapper::Web_socket_wrapper(const QUrl &url, QObject *parent) :
|
Web_socket_wrapper::Web_socket_wrapper(const QUrl &url, QObject *parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_web_socket(new QWebSocket("", QWebSocketProtocol::VersionLatest, this))
|
m_web_socket(new QWebSocket("", QWebSocketProtocol::VersionLatest, this)),
|
||||||
|
m_ping_timer(new QTimer(this)),
|
||||||
|
m_pong_timer(new QTimer(this))
|
||||||
{
|
{
|
||||||
connect(m_web_socket, &QWebSocket::connected, this, &Web_socket_wrapper::m_on_connected);
|
connect(m_web_socket, &QWebSocket::connected, this, &Web_socket_wrapper::m_on_connected);
|
||||||
connect(m_web_socket, &QWebSocket::disconnected, this, &Web_socket_wrapper::on_closed);
|
connect(m_web_socket, &QWebSocket::disconnected, this, &Web_socket_wrapper::on_closed);
|
||||||
|
connect(m_web_socket, &QWebSocket::pong, this, &Web_socket_wrapper::m_on_pong);
|
||||||
|
connect(m_ping_timer, &QTimer::timeout, this, [=]{
|
||||||
|
m_web_socket->ping();
|
||||||
|
m_pong_timer->start(500);
|
||||||
|
});
|
||||||
|
connect(m_pong_timer, &QTimer::timeout, this, &Web_socket_wrapper::m_on_pong_timeout);
|
||||||
|
m_ping_timer->setSingleShot(true);
|
||||||
|
m_pong_timer->setSingleShot(true);
|
||||||
m_web_socket->open(url);
|
m_web_socket->open(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,6 +121,9 @@ void Web_socket_wrapper::m_on_connected()
|
|||||||
m_connected = true;
|
m_connected = true;
|
||||||
connect(m_web_socket, &QWebSocket::textMessageReceived,
|
connect(m_web_socket, &QWebSocket::textMessageReceived,
|
||||||
this, &Web_socket_wrapper::m_on_received);
|
this, &Web_socket_wrapper::m_on_received);
|
||||||
|
|
||||||
|
m_ping_timer->start(1000);
|
||||||
|
|
||||||
emit on_connected();
|
emit on_connected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,3 +141,22 @@ void Web_socket_wrapper::m_on_received(QString message)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Web_socket_wrapper::m_on_pong(quint64 elapsedTime)
|
||||||
|
{
|
||||||
|
if (elapsedTime > 500)
|
||||||
|
{
|
||||||
|
m_web_socket->close();
|
||||||
|
emit on_closed();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pong_timer->stop();
|
||||||
|
m_ping_timer->start(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Web_socket_wrapper::m_on_pong_timeout()
|
||||||
|
{
|
||||||
|
qDebug() << "Pong timeout";
|
||||||
|
m_web_socket->close();
|
||||||
|
emit on_closed();
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define WEB_SOCKET_WRAPPER_H
|
#define WEB_SOCKET_WRAPPER_H
|
||||||
|
|
||||||
#include <QtWebSockets/QWebSocket>
|
#include <QtWebSockets/QWebSocket>
|
||||||
|
#include <QTimer>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
@@ -48,10 +49,14 @@ class Web_socket_wrapper : public QObject
|
|||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void m_on_connected();
|
void m_on_connected();
|
||||||
void m_on_received(QString message);
|
void m_on_received(QString message);
|
||||||
|
void m_on_pong(quint64 elapsedTime);
|
||||||
|
void m_on_pong_timeout();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_connected = false;
|
bool m_connected = false;
|
||||||
QWebSocket* m_web_socket;
|
QWebSocket* m_web_socket;
|
||||||
|
QTimer* m_ping_timer;
|
||||||
|
QTimer* m_pong_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // WEB_SOCKET_WRAPPER_H
|
#endif // WEB_SOCKET_WRAPPER_H
|
||||||
|
|||||||
Reference in New Issue
Block a user