| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #include "websocketclient.h"
- #include "appevent.h"
- #include "qjsonobject.h"
- #include <QTimer>
- #include <QGuiApplication>
- #include <QJsonDocument>
- #include <QProcess>
- #include <QRect>
- #include <QScreen>
- #include <QTemporaryFile>
- #include <QWebSocket>
- #include <api/processapi.h>
- WebSocketClient::WebSocketClient(const QUrl &url, QObject *parent)
- : QObject(parent)
- , retryTimer(new QTimer(this))
- , socket(new QWebSocket())
- , m_url(url)
- {
- connect(socket, &QWebSocket::connected, this, &WebSocketClient::onConnected);
- connect(socket, &QWebSocket::disconnected, this, &WebSocketClient::onDisconnected);
- connect(socket,
- QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
- this,
- &WebSocketClient::onError);
- connect(socket, &QWebSocket::textMessageReceived, this, &WebSocketClient::onTextMessageReceived);
- connect(retryTimer, &QTimer::timeout, this, &WebSocketClient::retryConnect);
- retryTimer->setInterval(1000); // 重试间隔,单位毫秒
- // retryTimer->start();
- connectToServer();
- }
- WebSocketClient *WebSocketClient::getInstance()
- {
- // d->jsonConfig.insert("serverIP", "127.0.0.1");
- // d->jsonConfig.insert("serverPort", "8080");
- // d->jsonConfig.insert("webSocketIP", "127.0.0.1");
- // d->jsonConfig.insert("webSocketPort", "8081");
- AppEvent *appEvent = AppEvent::instance();
- const QString ip = "ver.stem993.cn";
- const int port = 80;
- qDebug() << appEvent->machineCode();
- // 使用静态局部变量确保单例实例的延迟初始化
- static WebSocketClient instance(
- QUrl(QString("ws://%1:%2/ws/%3").arg(ip).arg(port).arg(appEvent->machineCode())));
- return &instance;
- }
- void WebSocketClient::sendTextMessage(const QString &message)
- {
- if (socket) {
- socket->sendTextMessage(message);
- }
- }
- void WebSocketClient::onConnected()
- {
- AppEvent::instance()->serverLink(true);
- retryTimer->stop();
- qDebug() << "WebSocket connected";
- }
- void WebSocketClient::onDisconnected()
- {
- AppEvent::instance()->serverLink(false);
- qDebug() << "WebSocket disconnected";
- retryTimer->start();
- }
- void WebSocketClient::onError(QAbstractSocket::SocketError error)
- {
- qDebug() << error;
- retryTimer->start();
- }
- void WebSocketClient::onTextMessageReceived(const QString &message)
- {
- qDebug() << "Message received:" << message;
- QJsonParseError jsonError;
- QJsonDocument jsonDoc = QJsonDocument::fromJson(message.toUtf8(), &jsonError);
- if (jsonError.error != QJsonParseError::NoError) {
- return;
- }
- QJsonObject object = jsonDoc.object();
- QJsonObject data = object["data"].toObject();
- const QString request = data["OperateCode"].toString();
- const QString OperateData = data["OperateData"].toString(); // 操作方式
- QJsonObject OperateObject;
- QJsonDocument OperateDataDoc = QJsonDocument::fromJson(OperateData.toUtf8(), &jsonError);
- if (jsonError.error == QJsonParseError::NoError) {
- OperateObject = OperateDataDoc.object();
- }
- if (request == "screenshot") { // 截图
- if (!OperateObject.isEmpty()) {
- // 可以考虑添加范围
- }
- QTemporaryFile tempFile("tempfile_XXXXXX.png");
- tempFile.setAutoRemove(true);
- tempFile.open();
- AppEvent::captureDesktop(&tempFile, "PNG");
- //qDebug() << "发送截图" << tempFile.fileName();
- TC::ProcessImageApi processImageApi;
- qDebug() << "发送截图" << processImageApi.post({tempFile.fileName()});
- tempFile.close();
- qDebug() << "发送截图" << tempFile.remove() << tempFile.errorString();
- }
- }
- void WebSocketClient::retryConnect()
- {
- // 重试连接
- connectToServer();
- // qDebug() << "retryConnect" << "------------";
- }
- void WebSocketClient::connectToServer()
- {
- socket->open(m_url);
- // qDebug() << "--------" << m_url;
- }
|