-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathvncwebviewwdiget.cpp
78 lines (66 loc) · 2.5 KB
/
vncwebviewwdiget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "vncwebviewwdiget.h"
#include <QFile>
#include "websocketserver.h"
VncWebViewWdiget::VncWebViewWdiget(QWidget* parent, ConnectInfo connInfo)
: QWidget(parent) {
this->connectInfo = connInfo;
qDebug() << "QSslSocket=" << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL支持情况:" << QSslSocket::supportsSsl();
setAttribute(Qt::WA_DeleteOnClose);
clientId = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch());
webChannel = new QWebChannel(this);
webChannel->registerObject(QStringLiteral("core"), this);
webView = new QWebEngineView(this);
webView->page()->setWebChannel(webChannel);
webView->resize(parent->size());
QFile file(":/html/novnc/index.html");
if (!file.open(QIODevice::ReadOnly)) {
return;
}
QString htmlData = file.readAll().constData();
webView->setHtml(htmlData);
// webView->setUrl(QUrl("http://192.168.0.110:8080/"));
webView->show();
connect(webView, SIGNAL(loadFinished(bool)), this,
SLOT(pageLoadFinished(bool)));
connect(WebSocketServer::getInstance(), &WebSocketServer::connectSuccess,
this, [=](QString clientId) {
if (clientId != this->clientId) {
return;
}
proxyClientThread = new QThread;
proxyClient = new VncProxyClient(clientId, connectInfo.hostName,
connectInfo.vncPort);
proxyClient->moveToThread(proxyClientThread);
connect(proxyClientThread, &QThread::started, proxyClient,
&VncProxyClient::connectToHost);
connect(proxyClientThread, &QThread::finished, proxyClient,
&VncProxyClient::deleteLater);
proxyClientThread->start();
});
}
VncWebViewWdiget::~VncWebViewWdiget() {
disconnect(this);
if (proxyClientThread) {
proxyClientThread->quit();
proxyClientThread->wait();
}
delete webChannel;
webView->close();
delete webView;
}
void VncWebViewWdiget::resizeEvent(QResizeEvent* event) {
;
webView->resize(event->size());
}
void VncWebViewWdiget::pageLoadFinished(bool flag) {
webView->page()->runJavaScript(
"setWebSocketServerPort(" +
QString::number(
WebSocketServer::getInstance()->getWebSocketServerPort()) +
")");
webView->page()->runJavaScript("setPassword('" + connectInfo.vncPassword +
"')");
webView->page()->runJavaScript("setClientId(" + clientId + ")");
}
void VncWebViewWdiget::connectSuccess() {}