vpnstatus/Socket.cpp

43 lines
1.3 KiB
C++

#include <QJsonDocument>
#include <QLocalSocket>
#include <QJsonObject>
#include "Socket.h"
Socket::Socket(Runner *runner) :
runner(runner)
{
}
void Socket::incomingConnection(quintptr socketDescriptor)
{
QLocalSocket *socket = new QLocalSocket;
if (!socket->setSocketDescriptor(socketDescriptor, QLocalSocket::ConnectedState, QLocalSocket::WriteOnly)) {
QTextStream(stderr) << "Socket failed to initialise." << endl;
delete socket;
return;
}
QObject::connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
QJsonObject pingObject;
QMap<QString, double> pingData_l = runner->pingData();
QMap<QString, double>::const_iterator it = pingData_l.constBegin();
QMap<QString, double>::const_iterator end = pingData_l.constEnd();
while (it != end) {
pingObject.insert(it.key(), it.value());
it++;
}
QJsonObject object;
object.insert("Current", runner->currentHost());
object.insert("Ping", pingObject);
object.insert("Refreshed", QString::number(runner->refreshed(), 16));
QJsonDocument document;
document.setObject(object);
QByteArray jsonData = document.toJson(QJsonDocument::Compact);
socket->write(jsonData + "\n");
socket->disconnectFromServer();
}