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
1414 #include "ScriptEngine.h"
1515 #include "WebSocketServerClass.h"
1616
17−WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, quint16 port) :
17+WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, const quint16 port) :
1818 _engine(engine),
1919 _webSocketServer(serverName, QWebSocketServer::SslMode::NonSecureMode)
2020 {
21− _webSocketServer.listen(QHostAddress::Any, port);
21+ if (_webSocketServer.listen(QHostAddress::Any, port)) {
22+ connect(&_webSocketServer, &QWebSocketServer::newConnection, this, &WebSocketServerClass::onNewConnection);
23+ }
2224 }
2325
2426 QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -33,12 +35,31 @@ QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptE · 8 unmodified lines
3335 if (portOption.isValid() && portOption.isNumber()) {
3436 port = portOption.toNumber();
3537 }
38+ QScriptValue serverNameOption = options.property(QStringLiteral("serverName"));
39+ if (serverNameOption.isValid() && serverNameOption.isString()) {
40+ serverName = serverNameOption.toString();
41+ }
3642 }
3743 return engine->newQObject(new WebSocketServerClass(engine, serverName, port));
3844 }
3945
4046 WebSocketServerClass::~WebSocketServerClass() {
4147 if (_webSocketServer.isListening()) {
42− _webSocketServer.close();
48+ close();
49+ }
50+}
51+
52+void WebSocketServerClass::onNewConnection() {
53+ WebSocketClass* newClient = new WebSocketClass(_engine, _webSocketServer.nextPendingConnection());
54+ _clients << newClient;
55+ emit newConnection(newClient);
56+}
57+
58+void WebSocketServerClass::close() {
59+ foreach(WebSocketClass* client, _clients) {
60+ if (client->getReadyState() != WebSocketClass::ReadyState::CLOSED) {
61+ client->close(QWebSocketProtocol::CloseCode::CloseCodeGoingAway, "Server closing.");
62+ }
4363 }
64+ _webSocketServer.close();
4465 }