Showing the changes to libraries/script-engine/src/WebSocketServerClass.cpp (1 of 5 files). Show all
Unified · Split
| @@ -14,11 +14,13 @@ · 13 unmodified lines | ||
| 14 | 14 | #include "ScriptEngine.h" |
| 15 | 15 | #include "WebSocketServerClass.h" |
| 16 | 16 | |
| 17 | −WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, quint16 port) : | |
| 17 | +WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, const quint16 port) : | |
| 18 | 18 | _engine(engine), |
| 19 | 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 | |
| 24 | 26 | QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptEngine* engine) { |
| @@ -33,12 +35,31 @@ QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptE · 8 unmodified lines | ||
| 33 | 35 | if (portOption.isValid() && portOption.isNumber()) { |
| 34 | 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 | 43 | return engine->newQObject(new WebSocketServerClass(engine, serverName, port)); |
| 38 | 44 | } |
| 39 | 45 | |
| 40 | 46 | WebSocketServerClass::~WebSocketServerClass() { |
| 41 | 47 | 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 | + } | |
| 43 | 63 | } |
| 64 | + _webSocketServer.close(); | |
| 44 | 65 | } |