Changes to integrate the websocket module as a full Qt Add-On module
authorSteven Ceuppens <steven.ceuppens@icloud.com>
Fri, 27 Sep 2013 12:27:27 +0000 (14:27 +0200)
committerKurt Pattyn <pattyn.kurt@gmail.com>
Sat, 28 Sep 2013 19:17:48 +0000 (21:17 +0200)
- Changed project files to use Qt structure
- Moved existing sources into subdirectory, to make room for moduels
- Created a "import/qmlwebsocket" module skeleton (works, but needs to be extended)
- Modified examples to not use "include(.pri)", but use "QT += websocket"
- Added qml example skeleton (works, but no useful functionality yet)

Project can be build with:

$ qmake
$ make
$ make install

Module can be used in other projects with

QT += websockets

Change-Id: I2123026958b264670dbf8a978dee76edf5855806
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
45 files changed:
.gitignore
.qmake.conf [new file with mode: 0644]
examples/echoclient/echoclient.pro
examples/echoserver/echoserver.pro
examples/examples.pro
examples/qmlwebsocketclient/data.qrc [new file with mode: 0644]
examples/qmlwebsocketclient/main.cpp [new file with mode: 0644]
examples/qmlwebsocketclient/qml/qmlwebsocketclient/main.qml [new file with mode: 0644]
examples/qmlwebsocketclient/qmlwebsocketclient.pro [new file with mode: 0644]
qwebsockets.pro [deleted file]
src/imports/imports.pro [new file with mode: 0644]
src/imports/qmlwebsockets/qmldir [new file with mode: 0644]
src/imports/qmlwebsockets/qmlwebsockets.pro [new file with mode: 0644]
src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp [new file with mode: 0644]
src/imports/qmlwebsockets/qmlwebsockets_plugin.h [new file with mode: 0644]
src/imports/qmlwebsockets/qqmlwebsocket.cpp [new file with mode: 0644]
src/imports/qmlwebsockets/qqmlwebsocket.h [new file with mode: 0644]
src/qwebsockets.pro [deleted file]
src/src.pro
src/websockets/dataprocessor_p.cpp [moved from src/dataprocessor_p.cpp with 100% similarity]
src/websockets/dataprocessor_p.h [moved from src/dataprocessor_p.h with 100% similarity]
src/websockets/doc/qwebsockets.qdoc [moved from src/doc/qwebsockets.qdoc with 100% similarity]
src/websockets/doc/qwebsockets.qdocconfig [moved from src/doc/qwebsockets.qdocconfig with 100% similarity]
src/websockets/handshakerequest_p.cpp [moved from src/handshakerequest_p.cpp with 100% similarity]
src/websockets/handshakerequest_p.h [moved from src/handshakerequest_p.h with 100% similarity]
src/websockets/handshakeresponse_p.cpp [moved from src/handshakeresponse_p.cpp with 100% similarity]
src/websockets/handshakeresponse_p.h [moved from src/handshakeresponse_p.h with 100% similarity]
src/websockets/qcorsauthenticator.cpp [moved from src/qcorsauthenticator.cpp with 100% similarity]
src/websockets/qcorsauthenticator.h [moved from src/qcorsauthenticator.h with 100% similarity]
src/websockets/qcorsauthenticator_p.h [moved from src/qcorsauthenticator_p.h with 100% similarity]
src/websockets/qwebsocket.cpp [moved from src/qwebsocket.cpp with 100% similarity]
src/websockets/qwebsocket.h [moved from src/qwebsocket.h with 100% similarity]
src/websockets/qwebsocket_p.cpp [moved from src/qwebsocket_p.cpp with 100% similarity]
src/websockets/qwebsocket_p.h [moved from src/qwebsocket_p.h with 100% similarity]
src/websockets/qwebsocketprotocol.cpp [moved from src/qwebsocketprotocol.cpp with 100% similarity]
src/websockets/qwebsocketprotocol.h [moved from src/qwebsocketprotocol.h with 100% similarity]
src/websockets/qwebsocketserver.cpp [moved from src/qwebsocketserver.cpp with 100% similarity]
src/websockets/qwebsocketserver.h [moved from src/qwebsocketserver.h with 100% similarity]
src/websockets/qwebsocketserver_p.cpp [moved from src/qwebsocketserver_p.cpp with 100% similarity]
src/websockets/qwebsocketserver_p.h [moved from src/qwebsocketserver_p.h with 100% similarity]
src/websockets/qwebsocketsglobal.h [moved from src/qwebsocketsglobal.h with 100% similarity]
src/websockets/websockets.pro [moved from src/qwebsockets.pri with 59% similarity]
sync.profile
tests/tests.pro
websockets.pro [new file with mode: 0644]

index 3425f4b..218d86e 100644 (file)
@@ -12,8 +12,6 @@
 *.dylib
 *.obj
 Makefile*
-moc_*.cpp
-*.moc
 
 # Directories to ignore
 # ---------------------
@@ -34,19 +32,28 @@ build-unittests-Qt_5_1_0_clang_64-Debug/unittests
 build-unittests-Qt_5_1_0_clang_64-Release/unittests
 examples/.coverity-submit
 
-reports
-doc/html
-build-examples-Qt_5_1_0_clang_64_temporary-Debug
-build-unittests-Qt_5_1_0_clang_64-Release
-src/doc/html
+# Qt specific
 .qmake.cache
-examples/echoclient/echoclient
-src/libQWebSockets.0.9.0.dylib
-src/libQWebSockets.0.9.dylib
-src/libQWebSockets.0.dylib
-src/libQWebSockets.1.0.0.dylib
-src/libQWebSockets.1.0.dylib
-src/libQWebSockets.1.dylib
-src/libQWebSockets.dylib
-examples/echoserver/echoserver
-tests/unittests
+*.pro.user
+*.pro.shared
+moc_*.cpp
+*.moc
+*_resource.rc
+ui_*.h
+qrc_*.cpp
+
+*~
+*.pdb
+*.exe
+*.lib
+*.res
+*.exp
+*.manifest
+config.log
+tmp
+imports/*
+include
+tests/auto/cmake/build
+lib/
+mkspecs/
+qml/
diff --git a/.qmake.conf b/.qmake.conf
new file mode 100644 (file)
index 0000000..4fb101b
--- /dev/null
@@ -0,0 +1,5 @@
+load(qt_build_config)
+
+CONFIG += qt_example_installs
+
+MODULE_VERSION = 5.1.1
index 565eea3..f6891ef 100644 (file)
@@ -1,4 +1,4 @@
-QT       += core
+QT       += core websockets
 QT       -= gui
 
 TARGET = echoclient
@@ -9,8 +9,6 @@ mac:QMAKE_CXXFLAGS += -Wall -Werror -Wextra
 
 TEMPLATE = app
 
-include(../../src/qwebsockets.pri)
-
 SOURCES += \
     main.cpp \
     echoclient.cpp
index 913cb6e..d2edcae 100644 (file)
@@ -1,4 +1,4 @@
-QT       += core
+QT       += core websockets
 QT       -= gui
 
 TARGET = echoserver
@@ -9,8 +9,6 @@ mac:QMAKE_CXXFLAGS += -Wall -Werror -Wextra
 
 TEMPLATE = app
 
-include(../../src/qwebsockets.pri)
-
 SOURCES += \
     main.cpp \
     echoserver.cpp
index b350436..653df67 100644 (file)
@@ -1,5 +1,5 @@
-cache()
 TEMPLATE = subdirs
 
-SUBDIRS =      echoclient \
-                       echoserver
+SUBDIRS = echoclient \
+        echoserver \
+        qmlwebsocketclient
diff --git a/examples/qmlwebsocketclient/data.qrc b/examples/qmlwebsocketclient/data.qrc
new file mode 100644 (file)
index 0000000..3ac4604
--- /dev/null
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>qml/qmlwebsocketclient/main.qml</file>
+    </qresource>
+</RCC>
diff --git a/examples/qmlwebsocketclient/main.cpp b/examples/qmlwebsocketclient/main.cpp
new file mode 100644 (file)
index 0000000..1df79e3
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include <QtGui/QGuiApplication>
+#include <QQuickView>
+
+int main(int argc, char *argv[])
+{
+    QGuiApplication app(argc, argv);
+
+    QQuickView view;
+    view.setSource(QUrl(QStringLiteral("qrc:/qml/qmlwebsocketclient/main.qml")));
+    view.show();
+
+    return app.exec();
+}
diff --git a/examples/qmlwebsocketclient/qml/qmlwebsocketclient/main.qml b/examples/qmlwebsocketclient/qml/qmlwebsocketclient/main.qml
new file mode 100644 (file)
index 0000000..7c227a4
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+import QtQuick 2.0
+import Qt.Playground.WebSockets 1.0
+
+Rectangle {
+    width: 360
+    height: 360
+
+    WebSocket {
+
+    }
+
+    Text {
+        text: qsTr("Hello World")
+        anchors.centerIn: parent
+    }
+
+    MouseArea {
+        anchors.fill: parent
+        onClicked: {
+            Qt.quit();
+        }
+    }
+}
diff --git a/examples/qmlwebsocketclient/qmlwebsocketclient.pro b/examples/qmlwebsocketclient/qmlwebsocketclient.pro
new file mode 100644 (file)
index 0000000..e4a7d13
--- /dev/null
@@ -0,0 +1,11 @@
+QT += qml quick
+
+TARGET = qmlwebsocketclient
+
+CONFIG   -= app_bundle
+
+SOURCES += main.cpp
+
+RESOURCES += \
+    data.qrc
+
diff --git a/qwebsockets.pro b/qwebsockets.pro
deleted file mode 100644 (file)
index 3c981a3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-cache()
-TEMPLATE = subdirs
-
-SUBDIRS =      \
-            src \
-            examples \
-            tests
-CONFIG += ordered
diff --git a/src/imports/imports.pro b/src/imports/imports.pro
new file mode 100644 (file)
index 0000000..6bf8069
--- /dev/null
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+
+SUBDIRS += qmlwebsockets
diff --git a/src/imports/qmlwebsockets/qmldir b/src/imports/qmlwebsockets/qmldir
new file mode 100644 (file)
index 0000000..549c286
--- /dev/null
@@ -0,0 +1,3 @@
+module Qt.Playground.WebSockets
+
+plugin declarative_qmlwebsockets
diff --git a/src/imports/qmlwebsockets/qmlwebsockets.pro b/src/imports/qmlwebsockets/qmlwebsockets.pro
new file mode 100644 (file)
index 0000000..fc25714
--- /dev/null
@@ -0,0 +1,11 @@
+QT += websockets qml
+
+TARGETPATH = Qt/Playground/WebSockets
+
+HEADERS += qmlwebsockets_plugin.h \
+    qqmlwebsocket.h
+
+SOURCES += qmlwebsockets_plugin.cpp \
+    qqmlwebsocket.cpp
+
+load(qml_plugin)
diff --git a/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp b/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp
new file mode 100644 (file)
index 0000000..d757348
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include "qmlwebsockets_plugin.h"
+
+#include <QtQml>
+
+void QmlWebsocket_plugin::registerTypes(const char *uri)
+{
+    Q_ASSERT(uri == QLatin1String("Qt.Playground.WebSockets"));
+
+    int major = 1;
+    int minor = 0;
+
+    // @uri Qt.Playground.WebSockets
+
+    qmlRegisterType<QQmlWebSocket>(uri, major, minor, "WebSocket");
+}
diff --git a/src/imports/qmlwebsockets/qmlwebsockets_plugin.h b/src/imports/qmlwebsockets/qmlwebsockets_plugin.h
new file mode 100644 (file)
index 0000000..cdb805f
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#ifndef QMLWEBSOCKET_PLUGIN_H
+#define QMLWEBSOCKET_PLUGIN_H
+
+#include <QQmlExtensionPlugin>
+
+#include "qqmlwebsocket.h"
+
+QT_BEGIN_NAMESPACE
+
+class QmlWebsocket_plugin : public QQmlExtensionPlugin
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+    void registerTypes(const char *uri);
+};
+
+QT_END_NAMESPACE
+
+#endif // QMLWEBSOCKET_PLUGIN_H
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.cpp b/src/imports/qmlwebsockets/qqmlwebsocket.cpp
new file mode 100644 (file)
index 0000000..72b1810
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include "qqmlwebsocket.h"
+
+QQmlWebSocket::QQmlWebSocket(QObject *parent) :
+    QObject(parent)
+{
+}
+
+void QQmlWebSocket::classBegin()
+{
+
+}
+
+void QQmlWebSocket::componentComplete()
+{
+
+}
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.h b/src/imports/qmlwebsockets/qqmlwebsocket.h
new file mode 100644 (file)
index 0000000..9b95c28
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#ifndef QQMLWEBSOCKET_H
+#define QQMLWEBSOCKET_H
+
+#include <QObject>
+#include <QQmlParserStatus>
+
+class QQmlWebSocket : public QObject, public QQmlParserStatus
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(QQmlWebSocket)
+    Q_INTERFACES(QQmlParserStatus)
+
+public:
+    explicit QQmlWebSocket(QObject *parent = 0);
+
+public:
+    void classBegin() Q_DECL_OVERRIDE;
+    void componentComplete() Q_DECL_OVERRIDE;
+};
+
+#endif // QQMLWEBSOCKET_H
diff --git a/src/qwebsockets.pro b/src/qwebsockets.pro
deleted file mode 100644 (file)
index 0480ec3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-QMAKE_DOCS = $$PWD/doc/qwebsockets.qdocconfig
-
-include($$PWD/qwebsockets.pri)
-
-TEMPLATE = lib
-VERSION = 0.9
-TARGET = QWebSockets
-
-mac:QMAKE_FRAMEWORK_BUNDLE_NAME = $$TARGET
-mac:QMAKE_CXXFLAGS += -Wall -Werror -Wextra
index e975a6b..759b5ba 100644 (file)
@@ -1 +1,3 @@
-include ($$PWD/qwebsockets.pro)
+TEMPLATE = subdirs
+
+SUBDIRS += websockets imports
similarity index 100%
rename from src/qwebsocket.h
rename to src/websockets/qwebsocket.h
similarity index 59%
rename from src/qwebsockets.pri
rename to src/websockets/websockets.pro
index c701c93..69ddc9c 100644 (file)
@@ -1,4 +1,29 @@
-QT       *= network
+QT += network
+
+TARGET = QtWebSockets
+
+TEMPLATE += lib
+
+DEFINES += QTWEBSOCKETS_LIBRARY
+
+load(qt_module)
+
+QMAKE_DOCS = $$PWD/doc/qwebsockets.qdocconfig
+
+PUBLIC_HEADERS += \
+    $$PWD/qwebsocket.h \
+    $$PWD/qwebsocketserver.h \
+    $$PWD/qwebsocketprotocol.h \
+    $$PWD/qwebsocketsglobal.h \
+    $$PWD/qcorsauthenticator.h
+
+PRIVATE_HEADERS += \
+    $$PWD/qwebsocket_p.h \
+    $$PWD/qwebsocketserver_p.h \
+    $$PWD/handshakerequest_p.h \
+    $$PWD/handshakeresponse_p.h \
+    $$PWD/dataprocessor_p.h \
+    $$PWD/qcorsauthenticator_p.h
 
 SOURCES += \
     $$PWD/qwebsocket.cpp \
@@ -11,18 +36,10 @@ SOURCES += \
     $$PWD/dataprocessor_p.cpp \
     $$PWD/qcorsauthenticator.cpp
 
-HEADERS += \
-    $$PWD/qwebsocket.h \
-    $$PWD/qwebsocket_p.h \
-    $$PWD/qwebsocketserver.h \
-    $$PWD/qwebsocketserver_p.h \
-    $$PWD/qwebsocketprotocol.h \
-    $$PWD/handshakerequest_p.h \
-    $$PWD/handshakeresponse_p.h \
-    $$PWD/dataprocessor_p.h \
-    $$PWD/qwebsocketsglobal.h \
-    $$PWD/qcorsauthenticator.h \
-    qcorsauthenticator_p.h
+HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
+
+#mac:QMAKE_FRAMEWORK_BUNDLE_NAME = $$TARGET
+#mac:QMAKE_CXXFLAGS += -Wall -Werror -Wextra
+
+
 
-INCLUDEPATH += $$PWD
-DEPENDPATH += $$PWD
index 7933ae7..b26d76c 100644 (file)
@@ -1,5 +1,12 @@
 %modules = (
-       "QWebSockets" => "$basedir/src",
+    "QtWebSockets" => "$basedir/src/websockets",
+);
+
+%moduleheaders = (
+);
+
+%classnames = (
+    "qtwebsockets.h" => "QtWebSockets",
 );
 
 %dependencies = (
index dc855d1..9cd3320 100644 (file)
@@ -1,6 +1,6 @@
 cache()
 
-QT += core network testlib
+QT += core network websockets testlib
 
 TARGET = unittests
 CONFIG  += testcase
@@ -10,19 +10,6 @@ CONFIG  -= app_bundle
 
 TEMPLATE = app
 
-mac:QMAKE_CXXFLAGS += -Wall -Werror -Wextra
-
-include(../src/qwebsockets.pri)
-
-# Remove the main.cpp file from the sources.
-#S = $$SOURCES
-#for(F, S) {
-#    M = $$find(F, main.cpp)
-#    count(M, 0) {
-#        SOURCES += $$F
-#    }
-#}
-
 SOURCES += \
         main.cpp \
         tst_websockets.cpp \
@@ -32,7 +19,4 @@ SOURCES += \
 HEADERS += \
     unittests.h
 
-INCLUDEPATH +=
-DEPENDPATH +=
-
 DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git a/websockets.pro b/websockets.pro
new file mode 100644 (file)
index 0000000..58c33f2
--- /dev/null
@@ -0,0 +1 @@
+load(qt_parts)