ДОСТУПНО ТОЛЬКО ПРИ ИСПОЛЬЗОВАНИИ Qt 5.
Для установки объекта в контекст JavaScript сборка jCjS должна содержать модуль QtWebSockets.
В сборке с Qt 4 конструктор JCJSWebSocketClient отсутствует.
Объект JCJSWebSocketClient — асинхронный клиент WebSocket, поддерживающий соединения ws и защищённые соединения wss. Объект доступен в контексте JavaScript при сборке jCjS с Qt 5 и модулем QtWebSockets.
Клиент может передавать стандартные сообщения WebSocket в режиме raw либо использовать протокол обмена jCjS с сериализацией QVariant, сжатием и встроенным шифрованием.
ВНИМАНИЕ!!! Для обмена с JCJSWebSocketServer следует установить raw = true, поскольку сервер выдаёт стандартные сообщения WebSocket без декодирования кадра протокола jCjS.
Variant webClient.url чтение/запись
Адрес WebSocket в виде строки или URL, например ws://127.0.0.1:8080 или wss://server.example:8443/path.
int webClient.timeout чтение/запись
Таймаут операций соединения в миллисекундах.
quint32 webClient.maxFrameSize чтение/запись
Максимальный размер входного сообщения. По умолчанию 67108864 (64 МБ), допустимый максимум 268435456 (256 МБ).
bool webClient.raw чтение/запись
При значении true строки отправляются текстовыми сообщениями WebSocket, остальные значения — бинарными. Включение raw отключает compressor.
bool webClient.compressor чтение/запись
Сжатие данных протокола jCjS. В raw-режиме не используется.
int webClient.protoSelf чтение/запись
Локальная версия протокола jCjS, 0–127.
int webClient.protoDest только чтение
Версия протокола, полученная от удалённой стороны.
bool webClient.crypt чтение/запись
Включение встроенного шифрования протокола jCjS.
String webClient.cryptPsw чтение/запись
Пароль встроенного шифрования.
bool webClient.ssl чтение/запись
Использовать wss вместо ws при соединении по имени и порту.
String webClient.sslProto чтение/запись
Протокол TLS. Настройка применяется к SSL-конфигурации WebSocket до открытия соединения.
String webClient.sslEncrypt, sslAuth, sslKeyExch только чтение
Параметры установленного TLS-соединения.
int webClient.sslBitsSupport, sslBitsUsed только чтение
Поддерживаемая и фактически используемая длина ключа TLS.
bool webClient.isWork только чтение
Соединение установлено либо находится в процессе установки.
String webClient.localAddress, localAddressV6, peerAddress, peerAddressV6, peerName только чтение
Адреса и имя узла текущего соединения.
int webClient.localPort, peerPort только чтение
Локальный и удалённый порты.
Number webClient.inCount, outCount, inCountBytes, outCountBytes только чтение
Счётчики принятых/переданных сообщений и байтов.
void webClient.readyRead(Variant message)
Успешно принято сообщение.
void webClient.connected()
Соединение установлено.
void webClient.disconnected()
Соединение закрыто.
void webClient.error(String errorText)
Ошибка соединения или обмена.
void webClient.errorInt(int errorCode)
Код ошибки QAbstractSocket.
void webClient.stateChanged(int state)
Изменилось состояние сокета.
void webClient.readChannelFinished()
Канал чтения закрыт.
void webClient.textFrameReceived(String frame, bool isLastFrame)
Получен текстовый фрагмент WebSocket.
void webClient.binaryFrameReceived(ByteArray frame, bool isLastFrame)
Получен бинарный фрагмент WebSocket.
void webClient.protoSelfChange(int newVer, int oldVer)
Версия протокола jCjS изменена при согласовании с удалённой стороной.
bool webClient.connectToServer(Variant url, int timeout = 2000)
Открыть соединение с URL.
bool webClient.connectToServer(String serverName, int port, int timeout = 2000)
Открыть ws/wss соединение по имени и порту.
void webClient.closeConnection()
Закрыть соединение.
bool webClient.isOpen(), bool webClient.isConnected()
Проверить состояние соединения.
bool webClient.waitForConnection(int ms = 5000)
Ожидать установления соединения не более указанного времени.
qint64 webClient.sendMessage(Variant message)
Отправить сообщение; возвращает количество переданных байтов либо 0 при ошибке.
bool webClient.addRootCert(String fileName)
Добавить корневой сертификат из файла.
String webClient.enumSocketType(int value), enumSocketError, enumSocketState, enumNetworkLayerProtocol
Преобразовать значение перечисления Qt в строку.
Подключение к обычному WebSocket-серверу:
post.loadPlugin('PluginNetwork').install(scriptEngine);
var webClient = new JCJSWebSocketClient();
webClient.raw = true;
webClient.maxFrameSize = 64 * 1024 * 1024;
webClient.connected.connect(function() {
post.log('i', 'WebSocket подключён');
webClient.sendMessage('Привет от jCjS');
});
webClient.readyRead.connect(function(message) {
post.log('i', 'Получено: ' + message);
});
webClient.error.connect(function(text) {
post.log('e', 'WebSocket: ' + text);
});
webClient.connectToServer('ws://127.0.0.1:8080', 3000);
Защищённое соединение:
var secureClient = new JCJSWebSocketClient();
secureClient.raw = true;
secureClient.ssl = true;
secureClient.sslProto = 'TlsV1_2';
secureClient.addRootCert('cert/root-ca.crt');
secureClient.connectToServer('wss://server.example:8443/ws', 5000);
Обмен по протоколу jCjS с совместимой удалённой стороной:
var jcjsClient = new JCJSWebSocketClient();
jcjsClient.raw = false;
jcjsClient.protoSelf = 1;
jcjsClient.compressor = true;
jcjsClient.connectToServer('ws://127.0.0.1:8090/jcjs');
jcjsClient.connected.connect(function() {
jcjsClient.sendMessage({ command: 'status', id: 100 });
});