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 | #include "ScriptEngine.h" | 14 | #include "ScriptEngine.h" |
| 15 | #include "WebSocketServerClass.h" | 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 | _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 | ||
| 24 | QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptEngine* engine) { | 26 | QScriptValue 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 | ||
| 40 | WebSocketServerClass::~WebSocketServerClass() { | 46 | WebSocketServerClass::~WebSocketServerClass() { |
| 41 | if (_webSocketServer.isListening()) { | 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 | } |