Skip to content
Snippets Groups Projects
Commit 2c64e6ef authored by akiraohgaki's avatar akiraohgaki
Browse files

WebSocket connection

parent 52b217d9
Branches
Tags
No related merge requests found
......@@ -48,14 +48,14 @@ int main(int argc, char *argv[])
int port = clParser.value(clOptionPort).toInt();
// Setup websocket server
WebSocketServer *webSocketServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app);
QObject::connect(webSocketServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
WebSocketServer *wsServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app);
QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
if (webSocketServer->start()) {
qDebug() << "Websocket server started at:" << webSocketServer->serverUrl().toString();
if (wsServer->start()) {
qDebug() << "Websocket server started at:" << wsServer->serverUrl().toString();
}
else {
qCritical() << "Failed to start websocket server:" << webSocketServer->errorString();
qCritical() << "Failed to start websocket server:" << wsServer->errorString();
return 1;
}
......
......@@ -2,23 +2,25 @@
#include <QHostAddress>
#include <QWebSocketServer>
#include <QWebSocket>
WebSocketServer::WebSocketServer(const QString &serverName, quint16 serverPort, QObject *parent)
: QObject(parent), serverName_(serverName), serverPort_(serverPort)
{
webSocketServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
connect(webSocketServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
wsServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
connect(wsServer_, &QWebSocketServer::newConnection, this, &WebSocketServer::wsNewConnection);
connect(wsServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
}
WebSocketServer::~WebSocketServer()
{
stop();
webSocketServer_->deleteLater();
wsServer_->deleteLater();
}
bool WebSocketServer::start()
{
if (webSocketServer_->listen(QHostAddress::Any, serverPort_)) {
if (wsServer_->listen(QHostAddress::Any, serverPort_)) {
emit started();
return true;
}
......@@ -27,12 +29,12 @@ bool WebSocketServer::start()
void WebSocketServer::stop()
{
webSocketServer_->close();
wsServer_->close();
}
bool WebSocketServer::isError()
{
if (webSocketServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
return true;
}
return false;
......@@ -40,10 +42,44 @@ bool WebSocketServer::isError()
QString WebSocketServer::errorString()
{
return webSocketServer_->errorString();
return wsServer_->errorString();
}
QUrl WebSocketServer::serverUrl()
{
return webSocketServer_->serverUrl();
return wsServer_->serverUrl();
}
void WebSocketServer::wsNewConnection()
{
QWebSocket *wsClient = wsServer_->nextPendingConnection();
connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected);
wsClients_ << wsClient;
}
void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClient->sendBinaryMessage(message);
}
}
void WebSocketServer::wsTextMessageReceived(const QString &message)
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClient->sendTextMessage(message);
}
}
void WebSocketServer::wsDisconnected()
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClients_.removeAll(wsClient);
wsClient->deleteLater();
}
}
......@@ -4,6 +4,7 @@
#include <QUrl>
class QWebSocketServer;
class QWebSocket;
class WebSocketServer : public QObject
{
......@@ -20,14 +21,19 @@ signals:
public slots:
bool start();
void stop();
bool isError();
QString errorString();
QUrl serverUrl();
private slots:
void wsNewConnection();
void wsBinaryMessageReceived(const QByteArray &message);
void wsTextMessageReceived(const QString &message);
void wsDisconnected();
private:
QString serverName_;
quint16 serverPort_;
QWebSocketServer *webSocketServer_;
QWebSocketServer *wsServer_;
QList<QWebSocket *> wsClients_;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment