#include "server.h" #include #include #include #include "serverutils.h" #include "serverprotocol.h" namespace ServerProtocol { void Server::parsePackage(const Package& pkg) { if (!pkg.isValid()) { return; } switch (pkg.hdr.command) { case ping: { if (pkg.hdr.type != Responke) { return; } Package resp; resp.hdr.command = ping; auto bytes = resp.toBytes(); if (bytes.size() != _client->write(bytes)) { QuasarAppUtils::Params::verboseLog("!responce sendet not wrong"); } break; } default: return; } } void Server::avelableBytes() { auto array = _client->readAll(); if (_downloadPackage.hdr.isValid()) { _downloadPackage.data.append(array); } else { memcpy(&_downloadPackage.hdr, array.data(), sizeof(unsigned char)); _downloadPackage.data.append(array.mid(1)); } if (_downloadPackage.isValid()) { parsePackage(_downloadPackage); _downloadPackage.reset(); return; } } void Server::incomingConnection(quintptr socketDescriptor) { _client->setSocketDescriptor(static_cast(socketDescriptor)); if (!_client->isValid()) { QuasarAppUtils::Params::verboseLog("incomingConnection not valid!"); return; } if (!_client->isOpen() && !_client->open()) { QuasarAppUtils::Params::verboseLog("incomingConnection not opened!"); return; } } Server::Server(QObject *ptr): QLocalServer (ptr) { _client = new QLocalSocket(this); connect(_client, &QLocalSocket::readyRead, this, &Server::avelableBytes); } }