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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "vsqmldebugclient.h"
#include <QMutex>
#include <QMutexLocker>
#include <QTimer>
#include <QtQmlDebug/private/qqmldebugclient_p.h>
#include <QtQmlDebug/private/qqmldebugconnection_p.h>
#include <QtPacketProtocol/private/qpacket_p.h>
class VsQmlDebugClientPrivate : public QQmlDebugClient
{
Q_OBJECT
public:
VsQmlDebugClient *q;
QString hostName;
quint16 hostPort;
QTimer checkConnection;
VsQmlDebugClientPrivate(VsQmlDebugClient *debugClient, QQmlDebugConnection *debugConnection)
: q(debugClient),
QQmlDebugClient("V8Debugger", debugConnection)
{
connect(this, &QQmlDebugClient::stateChanged, this, &VsQmlDebugClientPrivate::stateChanged);
checkConnection.setInterval(1000);
checkConnection.setSingleShot(false);
connect(&checkConnection, &QTimer::timeout,
this, &VsQmlDebugClientPrivate::checkConnectionState);
}
void messageReceived(const QByteArray &data) override;
public slots:
void stateChanged(State state);
void checkConnectionState();
};
VsQmlDebugClient::VsQmlDebugClient(QObject *parent)
: d(new VsQmlDebugClientPrivate(this, new QQmlDebugConnection(this))),
QObject(parent)
{ }
VsQmlDebugClient::~VsQmlDebugClient()
{
delete d;
}
void VsQmlDebugClient::connectToHost(const QString &hostName, quint16 port)
{
if (!d->connection()->isConnected()) {
d->hostName = hostName;
d->hostPort = port;
d->connection()->connectToHost(hostName, port);
}
}
void VsQmlDebugClient::startLocalServer(const QString &fileName)
{
if (!d->connection()->isConnected())
d->connection()->startLocalServer(fileName);
}
void VsQmlDebugClient::disconnectFromHost()
{
d->connection()->close();
emit disconnected();
}
void VsQmlDebugClient::sendMessage(
const QByteArray &messageType,
const QByteArray &messageParams)
{
QByteArray packetType = "V8DEBUG";
QPacket messageEnvelope(d->connection()->currentDataStreamVersion());
messageEnvelope << packetType << messageType << messageParams;
d->sendMessage(messageEnvelope.data());
}
void VsQmlDebugClientPrivate::messageReceived(const QByteArray &data)
{
QPacket messageEnvelope(connection()->currentDataStreamVersion(), data);
QByteArray packetType;
messageEnvelope >> packetType;
if (packetType == "V8DEBUG") {
QByteArray messageType;
QByteArray messageParams;
messageEnvelope >> messageType >> messageParams;
emit q->messageReceived(messageType, messageParams);
}
}
void VsQmlDebugClientPrivate::stateChanged(State state)
{
switch (state)
{
case QQmlDebugClient::Unavailable:
case QQmlDebugClient::NotConnected:
emit q->disconnected();
break;
case QQmlDebugClient::Enabled:
checkConnection.start();
emit q->connected();
break;
default:
break;
}
}
void VsQmlDebugClientPrivate::checkConnectionState()
{
if (!connection()->isConnected()) {
checkConnection.stop();
emit q->disconnected();
}
}
#include "vsqmldebugclient.moc"
|