#include #include #include #include #include #include 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(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(); }