mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-29 22:45:34 +00:00
[Browser] Add PingUpdater & PingHelper classes for detached ping
This commit is contained in:
parent
42eaa7a8fd
commit
db16e45e76
6 changed files with 201 additions and 0 deletions
|
@ -14,6 +14,8 @@ set(BROWSER
|
|||
netutils/HTTPNetwork.cpp
|
||||
netutils/Utils.cpp
|
||||
netutils/QueryClient.cpp
|
||||
PingUpdater.cpp
|
||||
PingHelper.cpp
|
||||
${CMAKE_SOURCE_DIR}/files/tes3mp/browser.rc
|
||||
)
|
||||
|
||||
|
@ -22,6 +24,8 @@ set(BROWSER_HEADER_MOC
|
|||
ServerModel.hpp
|
||||
ServerInfoDialog.hpp
|
||||
MySortFilterProxyModel.hpp
|
||||
PingUpdater.hpp
|
||||
PingHelper.hpp
|
||||
)
|
||||
|
||||
set(BROWSER_HEADER
|
||||
|
@ -29,6 +33,7 @@ set(BROWSER_HEADER
|
|||
netutils/HTTPNetwork.hpp
|
||||
netutils/Utils.hpp
|
||||
netutils/QueryClient.hpp
|
||||
Types.hpp
|
||||
)
|
||||
|
||||
source_group(browser FILES ${BROWSER} ${BROWSER_HEADER})
|
||||
|
|
58
apps/browser/PingHelper.cpp
Normal file
58
apps/browser/PingHelper.cpp
Normal file
|
@ -0,0 +1,58 @@
|
|||
//
|
||||
// Created by koncord on 03.05.17.
|
||||
//
|
||||
|
||||
#include "PingHelper.hpp"
|
||||
#include "ServerModel.hpp"
|
||||
#include <QDebug>
|
||||
#include "PingUpdater.hpp"
|
||||
|
||||
void PingHelper::Add(int row, AddrPair addrPair)
|
||||
{
|
||||
pingUpdater->addServer(row, addrPair);
|
||||
if(!pingThread->isRunning())
|
||||
pingThread->start();
|
||||
}
|
||||
|
||||
void PingHelper::Stop()
|
||||
{
|
||||
emit pingUpdater->stop();
|
||||
}
|
||||
|
||||
void PingHelper::SetModel(QAbstractTableModel *model)
|
||||
{
|
||||
this->model = model;
|
||||
}
|
||||
|
||||
void PingHelper::update(int row, unsigned ping)
|
||||
{
|
||||
model->setData(model->index(row, ServerData::PING), ping);
|
||||
}
|
||||
|
||||
PingHelper &PingHelper::Get()
|
||||
{
|
||||
static PingHelper helper;
|
||||
return helper;
|
||||
}
|
||||
|
||||
PingHelper::PingHelper()
|
||||
{
|
||||
QObject();
|
||||
pingThread = new QThread;
|
||||
pingUpdater = new PingUpdater;
|
||||
pingUpdater->moveToThread(pingThread);
|
||||
|
||||
connect(pingThread, SIGNAL(started()), pingUpdater, SLOT(process()));
|
||||
connect(pingUpdater, SIGNAL(start()), pingThread, SLOT(start()));
|
||||
connect(pingUpdater, SIGNAL(finished()), pingThread, SLOT(quit()));
|
||||
connect(this, SIGNAL(stop()), pingUpdater, SLOT(stop()));
|
||||
//connect(pingUpdater, SIGNAL(finished()), pingUpdater, SLOT(deleteLater()));
|
||||
connect(pingUpdater, SIGNAL(updateModel(int, unsigned)), this, SLOT(update(int, unsigned)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
PingHelper::~PingHelper()
|
||||
{
|
||||
|
||||
}
|
42
apps/browser/PingHelper.hpp
Normal file
42
apps/browser/PingHelper.hpp
Normal file
|
@ -0,0 +1,42 @@
|
|||
//
|
||||
// Created by koncord on 03.05.17.
|
||||
//
|
||||
|
||||
#ifndef OPENMW_PINGHELPER_HPP
|
||||
#define OPENMW_PINGHELPER_HPP
|
||||
|
||||
#include <QObject>
|
||||
#include <QAbstractTableModel>
|
||||
#include <QThread>
|
||||
#include "Types.hpp"
|
||||
|
||||
class PingUpdater;
|
||||
|
||||
class PingHelper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
void Add(int row, AddrPair addrPair);
|
||||
void Stop();
|
||||
void SetModel(QAbstractTableModel *model);
|
||||
//void UpdateImmedialy(PingUpdater::AddrPair addrPair);
|
||||
static PingHelper &Get();
|
||||
private:
|
||||
PingHelper();
|
||||
~PingHelper();
|
||||
|
||||
PingHelper(const PingHelper&) = delete;
|
||||
PingHelper& operator=(const PingHelper&) = delete;
|
||||
signals:
|
||||
void stop();
|
||||
public slots:
|
||||
void update(int row, unsigned ping);
|
||||
private:
|
||||
QThread *pingThread;
|
||||
PingUpdater *pingUpdater;
|
||||
QAbstractTableModel *model;
|
||||
};
|
||||
|
||||
|
||||
#endif //OPENMW_PINGHELPER_HPP
|
50
apps/browser/PingUpdater.cpp
Normal file
50
apps/browser/PingUpdater.cpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
//
|
||||
// Created by koncord on 02.05.17.
|
||||
//
|
||||
|
||||
#include "PingUpdater.hpp"
|
||||
#include "netutils/Utils.hpp"
|
||||
#include <QDebug>
|
||||
#include <QModelIndex>
|
||||
#include <QThread>
|
||||
|
||||
void PingUpdater::stop()
|
||||
{
|
||||
servers.clear();
|
||||
run = false;
|
||||
}
|
||||
|
||||
void PingUpdater::addServer(int row, AddrPair addr)
|
||||
{
|
||||
servers.push_back({row, addr});
|
||||
run = true;
|
||||
emit start();
|
||||
}
|
||||
|
||||
void PingUpdater::process()
|
||||
{
|
||||
while(run)
|
||||
{
|
||||
if(servers.count() == 0)
|
||||
{
|
||||
QThread::msleep(1000);
|
||||
if(servers.count() == 0)
|
||||
{
|
||||
qDebug() << "PingUpdater stopped due to inactivity";
|
||||
run = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
ServerRow server = servers.back();
|
||||
servers.pop_back();
|
||||
|
||||
unsigned ping = PingRakNetServer(server.second.first.toLatin1(), server.second.second);
|
||||
|
||||
qDebug() << "Pong from" << server.second.first + "|" + QString::number(server.second.second)
|
||||
<< ":" << ping << "ms";
|
||||
|
||||
emit updateModel(server.first, ping);
|
||||
}
|
||||
emit finished();
|
||||
}
|
31
apps/browser/PingUpdater.hpp
Normal file
31
apps/browser/PingUpdater.hpp
Normal file
|
@ -0,0 +1,31 @@
|
|||
//
|
||||
// Created by koncord on 02.05.17.
|
||||
//
|
||||
|
||||
#ifndef OPENMW_PINGUPDATER_HPP
|
||||
#define OPENMW_PINGUPDATER_HPP
|
||||
|
||||
#include <QObject>
|
||||
#include <QVector>
|
||||
|
||||
#include "Types.hpp"
|
||||
|
||||
class PingUpdater : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
void addServer(int row, AddrPair addrPair);
|
||||
public slots:
|
||||
void stop();
|
||||
void process();
|
||||
signals:
|
||||
void start();
|
||||
void updateModel(int row, unsigned ping);
|
||||
void finished();
|
||||
private:
|
||||
QVector<ServerRow> servers;
|
||||
bool run;
|
||||
};
|
||||
|
||||
|
||||
#endif //OPENMW_PINGUPDATER_HPP
|
15
apps/browser/Types.hpp
Normal file
15
apps/browser/Types.hpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
//
|
||||
// Created by koncord on 07.05.17.
|
||||
//
|
||||
|
||||
#ifndef OPENMW_TYPES_HPP
|
||||
#define OPENMW_TYPES_HPP
|
||||
|
||||
#include <QPair>
|
||||
#include <QString>
|
||||
|
||||
typedef QPair <QString, unsigned short> AddrPair;
|
||||
typedef QPair <int, AddrPair> ServerRow;
|
||||
|
||||
|
||||
#endif //OPENMW_TYPES_HPP
|
Loading…
Reference in a new issue