Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void MyTask::run()
- {
- Core core(descriptor, exit);
- core.exec();
- }
- #define CHUNK 2048
- Core::Core(qintptr handle, bool *exit, QObject *parent)
- : QEventLoop(parent), descriptor(handle)
- {
- socket = new QTcpSocket(this);
- socket->setSocketOption(QAbstractSocket::KeepAliveOption, 64);
- socket->setSocketDescriptor(descriptor);
- //Подключаем сигналы сокета к слотам
- connect(socket, &QTcpSocket::readyRead, this, &Core::onReadyRead);
- connect(socket, &QTcpSocket::disconnected, this, &Core::onDisconnected);
- }
- void Core::sendMessage(const QJsonValue &object)
- {
- //Формируется стандартная шапка ответа сервера клиенту
- //В параметр value передается объект с ответом под каждую комманду
- QJsonObject message;
- message.insert("ans", "ok");
- message.insert("command", command);
- message.insert("value", object);
- QJsonDocument doc(message);
- auto data = doc.toJson(QJsonDocument::Compact);
- while(!data.isEmpty()){
- socket->write(data.left(CHUNK));
- data.remove(0, CHUNK);
- if(!socket->waitForBytesWritten(10000)){
- socket->disconnectFromHost();
- quit();
- }
- }
- }
- MyDialog::MyDialog(QTcpSocket *socket, QWidget *parent) : QDialog(parent), socket(socket)
- {
- connect(this->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
- }
- void MyDialog::onError(QAbstractSocket::SocketError)
- {
- qDebug() << QTime::currentTime();
- QMessageBox::warning(this, "Ошибка соединения", socket->errorString());
- socket->disconnectFromHost();
- errorStatus = true;
- }
- void &MyDialog::sendMessage(const QJsonDocument &doc)
- {
- errorStatus = false;
- socket->connectToHost(ip, port, QIODevice::ReadWrite, QAbstractSocket::IPv4Protocol);
- if(!socket->waitForConnected(5000)){
- root = QJsonValue();
- errorStatus = true;
- return root;
- }
- socket->write(doc.toJson(QJsonDocument::Compact));
- QByteArray messageData;
- while(1){
- if(!socket->waitForReadyRead(5000)){
- break;
- }else{
- messageData.append(socket->readAll());
- }
- }
- socket->disconnectFromHost();
- ans = QJsonDocument::fromJson(messageData);
- }
Add Comment
Please, Sign In to add comment