57 lines
1.6 KiB
C++
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();
|
|
}
|