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/WebSocketServerClass.cpp (1 of 5 files). Show all

Unified · Split

libraries/script-engine/src/WebSocketServerClass.cpp+24−3
@@ -14,11 +14,13 @@ · 13 unmodified lines
14#include "ScriptEngine.h"14#include "ScriptEngine.h"
15#include "WebSocketServerClass.h"15#include "WebSocketServerClass.h"
16 16
17WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, quint16 port) :17WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, const quint16 port) :
18 _engine(engine),18 _engine(engine),
19 _webSocketServer(serverName, QWebSocketServer::SslMode::NonSecureMode)19 _webSocketServer(serverName, QWebSocketServer::SslMode::NonSecureMode)
20{20{
21 _webSocketServer.listen(QHostAddress::Any, port);21 if (_webSocketServer.listen(QHostAddress::Any, port)) {
22 connect(&_webSocketServer, &QWebSocketServer::newConnection, this, &WebSocketServerClass::onNewConnection);
23 }
22}24}
23 25
24QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptEngine* engine) {26QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -33,12 +35,31 @@ QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptE · 8 unmodified lines
33 if (portOption.isValid() && portOption.isNumber()) {35 if (portOption.isValid() && portOption.isNumber()) {
34 port = portOption.toNumber();36 port = portOption.toNumber();
35 }37 }
38 QScriptValue serverNameOption = options.property(QStringLiteral("serverName"));
39 if (serverNameOption.isValid() && serverNameOption.isString()) {
40 serverName = serverNameOption.toString();
41 }
36 }42 }
37 return engine->newQObject(new WebSocketServerClass(engine, serverName, port));43 return engine->newQObject(new WebSocketServerClass(engine, serverName, port));
38}44}
39 45
40WebSocketServerClass::~WebSocketServerClass() {46WebSocketServerClass::~WebSocketServerClass() {
41 if (_webSocketServer.isListening()) {47 if (_webSocketServer.isListening()) {
42 _webSocketServer.close();48 close();
49 }
50}
51
52void WebSocketServerClass::onNewConnection() {
53 WebSocketClass* newClient = new WebSocketClass(_engine, _webSocketServer.nextPendingConnection());
54 _clients << newClient;
55 emit newConnection(newClient);
56}
57
58void WebSocketServerClass::close() {
59 foreach(WebSocketClass* client, _clients) {
60 if (client->getReadyState() != WebSocketClass::ReadyState::CLOSED) {
61 client->close(QWebSocketProtocol::CloseCode::CloseCodeGoingAway, "Server closing.");
62 }
43 }63 }
64 _webSocketServer.close();
44}65}