dhtserver/src/main.cpp

57 lines
1.6 KiB
C++

#include <QCoreApplication>
#include <QLocalServer>
#include <QLocalSocket>
#include <QTextStream>
#include <QObject>
#include <QTimer>
extern "C" {
#include "libdht.h"
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QStringList args = a.arguments();
int PIN = 22; // PIN 22 is default for dhtserver
if (args.length() == 2) {
bool ok;
const int aPIN = args.at(1).toInt(&ok);
if (ok) {
PIN = aPIN;
}
}
QByteArray dhtJson;
QLocalServer localServer;
localServer.setSocketOptions(QLocalServer::WorldAccessOption);
bool isListen = localServer.listen("/var/run/dhtserver/dhtserver.sock");
if (!isListen) {
QTextStream(stderr) << "dhtserver: Unix socket can't listen!" << Qt::endl;
return -1;
}
QObject::connect(&localServer, &QLocalServer::newConnection, [&]() {
QLocalSocket *localSocket = localServer.nextPendingConnection();
if (localSocket) {
QObject::connect(localSocket, &QLocalSocket::disconnected, localSocket, &QLocalSocket::deleteLater);
localSocket->write(dhtJson);
localSocket->flush();
localSocket->disconnectFromServer();
}
});
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&]() {
char *dhtstring = static_cast<char*>(malloc(512));
int result = getdhtstring(PIN, dhtstring);
if (result == 0) {
dhtJson = QByteArray(dhtstring);
}
free(dhtstring);
});
timer.start(1000);
QTextStream(stderr) << "dhtserver: Server started successfully!" << Qt::endl;
return a.exec();
}