#include "loginrpc.h" #include #include #include LoginRpc::LoginRpc(int port, QObject *parent) : QObject(parent) { QTcpServer *srv = new QTcpServer(this); srv->listen(QHostAddress::Any, port); connect(srv, &QTcpServer::newConnection, [=] { while (srv->hasPendingConnections()) { QTcpSocket *sock = srv->nextPendingConnection(); handleIncoming(sock); } }); } void LoginRpc::handleIncoming(QTcpSocket *sock) { connect(sock, &QTcpSocket::readyRead, [=] { QByteArray ba = sock->readAll(); // XXX We assume everything arrives in one packet if (ba.length() < 2) { sock->deleteLater(); return; } int vers = (ba[0] << 8) + ba[1]; ba = ba.mid(2); ba = QByteArray::fromBase64(ba); if (vers == 1) { handleCommandV1(QString::fromUtf8(ba)); } else { qDebug() << "Ignoring unknown Login RPC version" << vers; } }); } void LoginRpc::handleCommandV1(const QString &command) { QStringList lines = command.split('\n'); while (lines.count() < 3) { lines.append(QString()); } emit loginRequest(lines[0], lines[1], lines[2]); }