diff --git a/SmartWebSocketServer.js b/SmartWebSocketServer.js new file mode 100644 index 0000000..ba8b835 --- /dev/null +++ b/SmartWebSocketServer.js @@ -0,0 +1,27 @@ +module.exports = upgradeWebSocketServer; + +function upgradeWebSocketServer(wss) { + wss.on("connection", (ws) => { + upgradeWebSocket(ws); + }); + wss.sendEvent = function(event, data) { + wss.clients.forEach((ws) => { + ws.sendEvent(event, data); + }); + } +} + +function upgradeWebSocket(ws) { + ws.on("message", (message) => { + let parsedMessage = null; + try { + parsedMessage = JSON.parse(message); + if ("event" in parsedMessage && "data" in parsedMessage) { + ws.emit(parsedMessage.event, parsedMessage.data); + } + } catch {} + }); + ws.sendEvent = function(event, data) { + return ws.send(JSON.stringify({"event" : event, "data" : data})); + } +} \ No newline at end of file diff --git a/examples/.gitignore b/examples/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/examples/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/examples/client.html b/examples/client.html new file mode 100644 index 0000000..bb89c41 --- /dev/null +++ b/examples/client.html @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/examples/package-lock.json b/examples/package-lock.json new file mode 100644 index 0000000..45e81c8 --- /dev/null +++ b/examples/package-lock.json @@ -0,0 +1,32 @@ +{ + "name": "examples", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "ws": "^8.18.0" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/examples/package.json b/examples/package.json new file mode 100644 index 0000000..37c3082 --- /dev/null +++ b/examples/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "ws": "^8.18.0" + } +} diff --git a/examples/server.js b/examples/server.js new file mode 100644 index 0000000..8c19768 --- /dev/null +++ b/examples/server.js @@ -0,0 +1,15 @@ +const { WebSocketServer } = require('ws'); +const upgradeWSS = require('../SmartWebSocketServer.js'); + +const wss = new WebSocketServer({ port: 8082 }); + +upgradeWSS(wss); + +wss.on("u_connection", (ws) => { + console.log("connected"); + ws.sendEvent("test", { "abc" : 123 }); +}); + +wss.on("listening", () => { + console.log("listening..."); +}) \ No newline at end of file