History

Completed implementation of WebSocket and WebSocketServer

Thijs Wenker committed 11 years ago

Commit e43dc3f1 parent 229b7ae5 files · +124 −37Browse files

Showing the changes to libraries/script-engine/src/WebSocketClass.cpp (1 of 5 files). Show all

Unified · Split

libraries/script-engine/src/WebSocketClass.cpp+60−23
@@ -16,13 +16,25 @@ · 15 unmodified lines
16#include "WebSocketClass.h"16#include "WebSocketClass.h"
17 17
18WebSocketClass::WebSocketClass(QScriptEngine* engine, QString url) :18WebSocketClass::WebSocketClass(QScriptEngine* engine, QString url) :
19 _engine(engine)19 _engine(engine),
20 _webSocket(new QWebSocket())
20{21{
21 connect(&_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose);22 initialize();
22 connect(&_webSocket, SIGNAL(error()), this, SLOT(handleOnError()));23 _webSocket->open(url);
23 connect(&_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage);24}
24 connect(&_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen);25
25 _webSocket.open(url);26WebSocketClass::WebSocketClass(QScriptEngine* engine, QWebSocket* qWebSocket) :
27 _engine(engine),
28 _webSocket(qWebSocket)
29{
30 initialize();
31}
32
33void WebSocketClass::initialize() {
34 connect(_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose);
35 connect(_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage);
36 connect(_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen);
37 _binaryType = "blob";
26}38}
27 39
28QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {40QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -39,26 +51,37 @@ WebSocketClass::~WebSocketClass() { · 10 unmodified lines
39}51}
40 52
41void WebSocketClass::send(QScriptValue message) {53void WebSocketClass::send(QScriptValue message) {
42 _webSocket.sendTextMessage(message.toString());54 _webSocket->sendTextMessage(message.toString());
55}
56
57void WebSocketClass::close() {
58 this->close(QWebSocketProtocol::CloseCode::CloseCodeNormal);
59}
60
61void WebSocketClass::close(QWebSocketProtocol::CloseCode closeCode) {
62 this->close(closeCode, QStringLiteral(""));
43}63}
44 64
45void WebSocketClass::close(QWebSocketProtocol::CloseCode closeCode, QString reason) {65void WebSocketClass::close(QWebSocketProtocol::CloseCode closeCode, QString reason) {
46 _webSocket.close(closeCode, reason);66 _webSocket->close(closeCode, reason);
47}67}
48 68
49void WebSocketClass::handleOnClose() {69void WebSocketClass::handleOnClose() {
50 if (_onCloseEvent.isFunction()) {70 bool hasError = false;
51 //QScriptValueList args;71 if (_webSocket->error() != QAbstractSocket::SocketError::UnknownSocketError) {
52 //args << ("received: " + message);72 hasError = true;
53 _onCloseEvent.call();//(QScriptValue(), args);73 if (_onErrorEvent.isFunction()) {
74 _onErrorEvent.call();
75 }
54 }76 }
55}77 if (_onCloseEvent.isFunction()) {
56 78 QScriptValueList args;
57void WebSocketClass::handleOnError(QAbstractSocket::SocketError error) {79 QScriptValue arg = _engine->newObject();
58 if (_onErrorEvent.isFunction()) {80 arg.setProperty("code", hasError ? QWebSocketProtocol::CloseCode::CloseCodeAbnormalDisconnection : _webSocket->closeCode());
59 // QScriptValueList args;81 arg.setProperty("reason", _webSocket->closeReason());
60 //args << ("received: " + message);82 arg.setProperty("wasClean", !hasError);
61 _onErrorEvent.call();/// QScriptValue(), args);83 args << arg;
84 _onCloseEvent.call(QScriptValue(), args);
62 }85 }
63}86}
64 87
@@ -74,8 +97,22 @@ void WebSocketClass::handleOnMessage(const QString& message) { · 9 unmodified lines
74 97
75void WebSocketClass::handleOnOpen() {98void WebSocketClass::handleOnOpen() {
76 if (_onOpenEvent.isFunction()) {99 if (_onOpenEvent.isFunction()) {
77 //QScriptValueList args;100 _onOpenEvent.call();
78 //args << ("received: " + message);
79 _onOpenEvent.call();// QScriptValue(), args);
80 }101 }
81}102}
103
104QScriptValue qWSCloseCodeToScriptValue(QScriptEngine* engine, const QWebSocketProtocol::CloseCode &closeCode) {
105 return closeCode;
106}
107
108void qWSCloseCodeFromScriptValue(const QScriptValue &object, QWebSocketProtocol::CloseCode &closeCode) {
109 closeCode = (QWebSocketProtocol::CloseCode)object.toUInt16();
110}
111
112QScriptValue webSocketToScriptValue(QScriptEngine* engine, WebSocketClass* const &in) {
113 return engine->newQObject(in);
114}
115
116void webSocketFromScriptValue(const QScriptValue &object, WebSocketClass* &out) {
117 out = qobject_cast<WebSocketClass*>(object.toQObject());
118}