diff --git a/package.json b/package.json index f1451f0..42a7a26 100755 --- a/package.json +++ b/package.json @@ -24,18 +24,20 @@ }, "homepage": "https://github.com/excalidraw/excalidraw-room#readme", "dependencies": { - "@types/socket.io": "^2.1.4", + "debug": "4.1.1", "eslint": "6.8.0", "eslint-config-prettier": "6.10.0", "eslint-plugin-prettier": "3.1.2", - "express": "^4.17.1", + "express": "4.17.1", "prettier": "1.19.1", - "socket.io": "^2.3.0" + "socket.io": "2.3.0" }, "devDependencies": { - "@types/express": "^4.17.3", - "@types/node": "^13.9.0", - "typescript": "^3.8.3" + "@types/socket.io": "2.1.4", + "@types/debug": "4.1.5", + "@types/express": "4.17.3", + "@types/node": "13.9.0", + "typescript": "3.8.3" }, "eslintConfig": { "extends": [ diff --git a/src/index.ts b/src/index.ts index 92f65dd..351b6ad 100755 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,11 @@ import express from "express"; import http, { ServerResponse } from "http"; import socketIO from "socket.io"; +import debug from "debug"; + +const serverDebug = debug("server"); +const ioDebug = debug("io"); +const socketDebug = debug("socket"); const app = express(); const port = process.env.PORT || 80; // default port to listen @@ -8,7 +13,7 @@ const port = process.env.PORT || 80; // default port to listen const server = http.createServer(app); server.listen(port, () => { - console.log(`listening on port: ${port}`); + serverDebug(`listening on port: ${port}`); }); const io = socketIO(server, { @@ -24,10 +29,10 @@ const io = socketIO(server, { }); io.on("connection", socket => { - console.log("connection established!"); + ioDebug("connection established!"); io.to(`${socket.id}`).emit("init-room"); socket.on("join-room", roomID => { - console.log(`${socket.id} has joined ${roomID}`); + socketDebug(`${socket.id} has joined ${roomID}`); socket.join(roomID); if (io.sockets.adapter.rooms[roomID].length <= 1) { io.to(`${socket.id}`).emit("first-in-room"); @@ -43,11 +48,21 @@ io.on("connection", socket => { socket.on( "server-broadcast", (roomID: string, encryptedData: ArrayBuffer, iv: Uint8Array) => { - console.log(`${socket.id} sends update to ${roomID}`); + socketDebug(`${socket.id} sends update to ${roomID}`); socket.broadcast.to(roomID).emit("client-broadcast", encryptedData, iv); } ); + socket.on( + "server-volatile-broadcast", + (roomID: string, encryptedData: ArrayBuffer, iv: Uint8Array) => { + socketDebug(`${socket.id} sends volatile update to ${roomID}`); + socket.volatile.broadcast + .to(roomID) + .emit("client-broadcast", encryptedData, iv); + } + ); + socket.on("disconnecting", () => { const rooms = io.sockets.adapter.rooms; for (const roomID in socket.rooms) { diff --git a/yarn.lock b/yarn.lock index 82e49e3..2242b19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38,6 +38,11 @@ dependencies: "@types/node" "*" +"@types/debug@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" + integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== + "@types/express-serve-static-core@*": version "4.17.2" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.2.tgz#f6f41fa35d42e79dbf6610eccbb2637e6008a0cf" @@ -46,7 +51,7 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@^4.17.3": +"@types/express@4.17.3": version "4.17.3" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.3.tgz#38e4458ce2067873b09a73908df488870c303bd9" integrity sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg== @@ -60,7 +65,7 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== -"@types/node@*", "@types/node@^13.9.0": +"@types/node@*", "@types/node@13.9.0": version "13.9.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589" integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ== @@ -78,7 +83,7 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" -"@types/socket.io@^2.1.4": +"@types/socket.io@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.4.tgz#674e7bc193c5ccdadd4433f79f3660d31759e9ac" integrity sha512-cI98INy7tYnweTsUlp8ocveVdAxENUThO0JsLSCs51cjOP2yV5Mqo5QszMDPckyRRA+PO6+wBgKvGvHUCc23TQ== @@ -371,7 +376,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.0.1, debug@~4.1.0: +debug@4.1.1, debug@^4.0.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -597,7 +602,7 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -express@^4.17.1: +express@4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -1335,7 +1340,7 @@ socket.io-parser@~3.4.0: debug "~4.1.0" isarray "2.0.1" -socket.io@^2.3.0: +socket.io@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== @@ -1475,7 +1480,7 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@^3.8.3: +typescript@3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==