QHttpServer 6.8.0 больше не отправляет newWebSocketConnection() в myclass::myslot()C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QHttpServer 6.8.0 больше не отправляет newWebSocketConnection() в myclass::myslot()

Сообщение Anonymous »

Что нужно:
Использовать один и тот же порт для http и websocket.
Некоторое время назад у меня возникла проблема, описанная в QTBUG-121562 (QHttpServer не выдает новое соединение WebSocket() с myclass::myslot()), которое было решено (до Qt 6.7.x) с помощью решения, предложенного Евгением Мещеряковым:
Но теперь (Qt6.8.0) я получил ошибку при компиляции и больше не работает:
Сбой статического утверждения: ошибка аргументов ViewHandler: QHttpServerResponder можно передать только как ссылку .
Я это сделал в Qt 6.8.0:
httpServer->route("/ws/", [](QHttpServerResponder &respond) {
//httpServer->route("/ws/", [](QHttpServerResponder &&respond) { // here compiler gives error in Qt 6.8.0
auto _respond = std::move(respond);
});

Это устранило ошибку компилятора, но СИГНАЛ больше не генерируется.
Я не знаю, ошибка это или просто изменение как работает Qt6.8.0.
Пример кода ниже работает нормально в Qt 6.7.2, но НЕ в 6.8.0 и 6.8.1.
Проверьте ===>> #если (QT_VERSION < QT_VERSION_CHECK(6, 8, 0))
Порты: 4445 (только веб-сокет) и 8001 (http и один и тот же порт веб-сокета).
Используйте localhost:8001 для http сервер (index.html), а проект должен указывать на основную папку проекта.
httpsocketlistener.h
#ifndef HTTPSOCKETLISTENER_H
#define HTTPSOCKETLISTENER_H

#include
#include
#include
#include
#include
#include

class HttpSocketListener : public QObject
{
Q_OBJECT
public:
explicit HttpSocketListener(QObject *parent = nullptr);
~HttpSocketListener();

#if (QT_VERSION < QT_VERSION_CHECK(6, 8, 0))
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
#else
quint16 listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
#endif

void addRoutes(QHttpServer * httpServer);

protected:

signals:
void clientConnected(QWebSocket * newWebSocketConnection);

public slots:
void incomingConnection();

private:
QHttpServer * m_pHttpSocketServer;

};

#endif // HTTPSOCKETLISTENER_H

httpsocketlistener.cpp
#include "httpsocketlistener.h"

#include
#include
#include
#include

HttpSocketListener::HttpSocketListener(QObject *parent)
: QObject{parent}
{
qDebug() listen(address, port) || !m_pHttpSocketServer->bind(tcpserver.get())) {
qDebug() route("/ws/", [](QHttpServerResponder &&respond) {
//httpServer->route("/ws/", [](QHttpServerResponder &respond) { // this compiles, but it does not emit the signal
auto _respond = std::move(respond);
});
#endif
httpServer->route("/json/", [] {
return QJsonObject{
{
{"key1", "1"},
{"key2", "2"},
{"key3", "3"}
}
};
});

httpServer->route("/api/", [] {
return QJsonObject{
{
{"Api_1", "1"},
{"Api_2", "2"},
{"Api_3", "3"}
}
};
});
}

websocketlistener.h
#ifndef WEBSOCKETLISTENER_H
#define WEBSOCKETLISTENER_H

#include
#include
#include
#include

class WebSocketListener : public QObject
{
Q_OBJECT
public:
explicit WebSocketListener(QObject *parent = 0);
~WebSocketListener();

bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);

protected:

signals:
void clientConnected(QWebSocket * newWebSocketConnection);

public slots:
void incomingConnection();

private:
QPointer m_pWebSocketServer;
};

#endif // WEBSOCKETLISTENER_H

websocketlistener.cpp
#include "websocketlistener.h"

WebSocketListener::WebSocketListener(QObject *parent) :
QObject(parent)
{
qDebug() nextPendingConnection();
qDebug() listen( QHostAddress::AnyIPv4, websocketlistenPort ) ){
qDebug() listen( QHostAddress::AnyIPv4, httpsocketlistenPort ) ){
qDebug()

Подробнее здесь: https://stackoverflow.com/questions/793 ... smyslot-an
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»