From 48f8b9c2beca7f5b836212d8c05a2d6fb73bf9dd Mon Sep 17 00:00:00 2001
From: Akira Ohgaki <akiraohgaki@gmail.com>
Date: Thu, 27 Apr 2017 18:51:06 +0900
Subject: [PATCH] Add websocket server class

---
 app/app.pri                            |  5 ++++-
 app/src/main.cpp                       |  7 ++++++-
 app/src/websockets/websocketserver.cpp | 25 +++++++++++++++++++++++++
 app/src/websockets/websocketserver.h   | 23 +++++++++++++++++++++++
 4 files changed, 58 insertions(+), 2 deletions(-)
 create mode 100644 app/src/websockets/websocketserver.cpp
 create mode 100644 app/src/websockets/websocketserver.h

diff --git a/app/app.pri b/app/app.pri
index 007ea36..21388a6 100644
--- a/app/app.pri
+++ b/app/app.pri
@@ -1,10 +1,12 @@
 QT += \
     core \
-    network
+    network \
+    websockets
 
 QT -= gui
 
 HEADERS += \
+    $${PWD}/src/websockets/websocketserver.h \
     $${PWD}/src/handlers/confighandler.h \
     $${PWD}/src/handlers/systemhandler.h \
     $${PWD}/src/handlers/ocshandler.h \
@@ -12,6 +14,7 @@ HEADERS += \
 
 SOURCES += \
     $${PWD}/src/main.cpp \
+    $${PWD}/src/websockets/websocketserver.cpp \
     $${PWD}/src/handlers/confighandler.cpp \
     $${PWD}/src/handlers/systemhandler.cpp \
     $${PWD}/src/handlers/ocshandler.cpp \
diff --git a/app/src/main.cpp b/app/src/main.cpp
index 23fe103..9bab403 100644
--- a/app/src/main.cpp
+++ b/app/src/main.cpp
@@ -8,13 +8,14 @@
 #include "handlers/systemhandler.h"
 #include "handlers/ocshandler.h"
 #include "handlers/itemhandler.h"
+#include "websockets/websocketserver.h"
 
 int main(int argc, char *argv[])
 {
     // Init
     QCoreApplication app(argc, argv);
 
-    ConfigHandler *configHandler = new ConfigHandler();
+    ConfigHandler *configHandler = new ConfigHandler(&app);
     QJsonObject appConfigApplication = configHandler->getAppConfigApplication();
 
     app.setApplicationName(appConfigApplication["name"].toString());
@@ -35,5 +36,9 @@ int main(int argc, char *argv[])
     clParser.addVersionOption();
     clParser.process(app);
 
+    // Setup websocket server
+    WebSocketServer *webSocketServer = new WebSocketServer(appConfigApplication["id"].toString(), 443, &app);
+    webSocketServer->start();
+
     return app.exec();
 }
diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp
new file mode 100644
index 0000000..37e67c6
--- /dev/null
+++ b/app/src/websockets/websocketserver.cpp
@@ -0,0 +1,25 @@
+#include "websocketserver.h"
+
+#include <QHostAddress>
+#include <QWebSocketServer>
+
+WebSocketServer::WebSocketServer(const QString &serverName, quint16 serverPort, QObject *parent)
+    : QObject(parent), serverName_(serverName), serverPort_(serverPort)
+{
+    webSocketServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
+}
+
+WebSocketServer::~WebSocketServer()
+{
+    webSocketServer_->deleteLater();
+}
+
+bool WebSocketServer::start()
+{
+    return webSocketServer_->listen(QHostAddress::Any, serverPort_);
+}
+
+void WebSocketServer::stop()
+{
+    webSocketServer_->close();
+}
diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h
new file mode 100644
index 0000000..115e4f5
--- /dev/null
+++ b/app/src/websockets/websocketserver.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <QObject>
+
+class QWebSocketServer;
+
+class WebSocketServer : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit WebSocketServer(const QString &serverName, quint16 serverPort = 0, QObject *parent = 0);
+    ~WebSocketServer();
+
+public slots:
+    bool start();
+    void stop();
+
+private:
+    QString serverName_;
+    quint16 serverPort_;
+    QWebSocketServer *webSocketServer_;
+};
-- 
GitLab