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

WebSocket connection

parent 52b217d9
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment