-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnection.cpp
More file actions
132 lines (103 loc) · 2.89 KB
/
connection.cpp
File metadata and controls
132 lines (103 loc) · 2.89 KB
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
125
126
127
128
129
130
131
132
#include "connection.h"
Connection::Connection(bool debug)
: m_debug(debug)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::Connection()";
}
connect(this, &QWebSocket::connected, this, &Connection::onConnected);
connect(this, &QWebSocket::disconnected, this, &Connection::onDisconnected);
}
void Connection::setUrl(QString ip, QString port)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::setUrl(ip, port) with ip"<<ip<<" and port"<<port;
}
// We're changing the url, so if the connection is open we should close it and let it attempt to reconnect next time
// the remote is used
if (isValid()) {
if (m_debug) {
qDebug() << "Qore2: Closing WebSocket";
}
close();
}
// Set the connection url
QString url = nullptr;
QString prefix = "ws://";
QString seperator = ":";
url.reserve(prefix.length() + ip.length() + seperator.length() + port.length());
url.append(prefix).append(ip).append(seperator).append(port);
if (m_debug) {
qDebug() << "Qore2: Setting WebSocket to:" << url;
}
m_url = QUrl(url);
}
void Connection::sendInputDotMethod(QString method)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::sendInputDotMethod(method) with method " << method;
}
send(QJsonObject {
{"jsonrpc", "2.0"},
{"id", "1"},
{"method", "Input." + method}
});
}
void Connection::sendExecuteActionMethod(QString action)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::sendExecuteActionMethod(action) with action " << action;
}
send(QJsonObject {
{"jsonrpc", "2.0"},
{"id", "1"},
{"method", "Input.ExecuteAction"},
{"params", QJsonObject {
{"action", action}
}
}
});
}
void Connection::sendSendTextMethod(QString text)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::sendSendTextMethod(text) with text " << text;
}
send(QJsonObject {
{"jsonrpc", "2.0"},
{"id", "1"},
{"method", "Input.SendText"},
{"params", QJsonObject {
{"text", text}
}
}
});
}
void Connection::send(QJsonObject object)
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::send()";
}
if (m_debug) {
qDebug() << "Qore: Sending:" << object;
}
jsonAsByteArray = QJsonDocument(object).toJson();
if (isValid()) {
sendTextMessage(jsonAsByteArray);
} else {
open(m_url);
}
}
void Connection::onConnected()
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::onConnected() (WebSocket is connected)";
}
sendTextMessage(jsonAsByteArray);
}
void Connection::onDisconnected()
{
if (m_debug) {
qDebug() << "Qore2: Running Connection::onDisconnected() (WebSocket is disconnected)";
}
}