@colyseus/monitor 0.17.6 → 0.17.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api.cjs +1 -1
- package/build/api.cjs.map +2 -2
- package/build/api.mjs +1 -1
- package/build/api.mjs.map +2 -2
- package/build/ext/Room.cjs +37 -0
- package/build/ext/Room.cjs.map +2 -2
- package/build/ext/Room.mjs +37 -0
- package/build/ext/Room.mjs.map +2 -2
- package/build/static/assets/index-C4SPBCkT.css +1 -0
- package/build/static/assets/index-DsiKUEz6.js +247 -0
- package/build/static/assets/index-DsiKUEz6.js.map +1 -0
- package/build/static/index.html +2 -2
- package/package.json +3 -4
- package/src-backend/api.ts +1 -1
- package/src-backend/ext/Room.ts +40 -0
- package/README.md +0 -57
- package/build/static/assets/index-8wRFHIxm.css +0 -1
- package/build/static/assets/index-BJyvzHj3.js +0 -248
- package/build/static/assets/index-BJyvzHj3.js.map +0 -1
package/build/api.cjs
CHANGED
|
@@ -95,7 +95,7 @@ function getAPI(opts) {
|
|
|
95
95
|
const args = JSON.parse(req.query.args);
|
|
96
96
|
try {
|
|
97
97
|
const data = await import_core.matchMaker.remoteRoomCall(roomId, method, args);
|
|
98
|
-
res.json(data);
|
|
98
|
+
res.json(data != null ? data : {});
|
|
99
99
|
} catch (e) {
|
|
100
100
|
const message = UNAVAILABLE_ROOM_ERROR.replace("$roomId", roomId);
|
|
101
101
|
res.status(500);
|
package/build/api.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src-backend/api.ts"],
|
|
4
|
-
"sourcesContent": ["import { matchMaker } from '@colyseus/core';\n\nimport express from 'express';\nimport { OSUtils } from 'node-os-utils';\n\nimport type { MonitorOptions } from './index.js';\n\nconst osutils = new OSUtils();\n\nconst UNAVAILABLE_ROOM_ERROR = \"@colyseus/monitor: room $roomId is not available anymore.\";\n\nexport function getAPI (opts: Partial<MonitorOptions>): express.Router {\n const api = express.Router();\n\n api.get(\"/\", async (req: express.Request, res: express.Response) => {\n try {\n const rooms: any[] = await matchMaker.query({});\n const columns = opts.columns || ['roomId', 'name', 'clients', 'maxClients', 'locked', 'elapsedTime'];\n\n // extend columns to expose \"publicAddress\", if present\n if (!opts.columns && rooms[0] && rooms[0].publicAddress !== undefined) {\n columns.push(\"publicAddress\");\n }\n\n let connections: number = 0;\n\n const cpuUsage = await osutils.cpu.usage();\n const cpu = (cpuUsage.success) ? cpuUsage.data : NaN;\n\n const memoryInfo = await osutils.memory.info();\n const totalMemMb = (memoryInfo.success) ? memoryInfo.data.total?.toMB() : NaN;\n const usedMemMb = (memoryInfo.success) ? memoryInfo.data.used?.toMB() : NaN;\n\n res.json({\n columns,\n rooms: rooms.map(room => {\n const data = JSON.parse(JSON.stringify(room));\n\n connections += room.clients;\n\n // additional data\n data.locked = room.locked || false;\n data.private = room.private;\n\n data.maxClients = `${room.maxClients}`;\n\n data.elapsedTime = Date.now() - new Date(room.createdAt).getTime();\n return data;\n }),\n\n connections,\n cpu,\n memory: {\n totalMemMb,\n usedMemMb \n },\n });\n } catch (e: any) {\n const message = e.message;\n console.error(message);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n try {\n const inspectData = await matchMaker.remoteRoomCall(roomId, \"getInspectData\");\n res.json(inspectData);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room/call\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n const method = req.query.method as string;\n const args = JSON.parse(req.query.args as string);\n\n try {\n const data = await matchMaker.remoteRoomCall(roomId, method, args);\n res.json(data);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n return api;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA2B;AAE3B,qBAAoB;AACpB,2BAAwB;AAIxB,IAAM,UAAU,IAAI,6BAAQ;AAE5B,IAAM,yBAAyB;AAExB,SAAS,OAAQ,MAA+C;AACnE,QAAM,MAAM,eAAAA,QAAQ,OAAO;AAE3B,MAAI,IAAI,KAAK,OAAO,KAAsB,QAA0B;AAdxE;AAeQ,QAAI;AACA,YAAM,QAAe,MAAM,uBAAW,MAAM,CAAC,CAAC;AAC9C,YAAM,UAAU,KAAK,WAAW,CAAC,UAAU,QAAQ,WAAW,cAAc,UAAU,aAAa;AAGnG,UAAI,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAW;AACnE,gBAAQ,KAAK,eAAe;AAAA,MAChC;AAEA,UAAI,cAAsB;AAE1B,YAAM,WAAW,MAAM,QAAQ,IAAI,MAAM;AACzC,YAAM,MAAO,SAAS,UAAW,SAAS,OAAO;AAEjD,YAAM,aAAa,MAAM,QAAQ,OAAO,KAAK;AAC7C,YAAM,aAAc,WAAW,WAAW,gBAAW,KAAK,UAAhB,mBAAuB,SAAS;AAC1E,YAAM,YAAa,WAAW,WAAW,gBAAW,KAAK,SAAhB,mBAAsB,SAAS;AAExE,UAAI,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM,IAAI,UAAQ;AACrB,gBAAM,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAE5C,yBAAe,KAAK;AAGpB,eAAK,SAAS,KAAK,UAAU;AAC7B,eAAK,UAAU,KAAK;AAEpB,eAAK,aAAa,GAAG,KAAK,UAAU;AAEpC,eAAK,cAAc,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AACjE,iBAAO;AAAA,QACX,CAAC;AAAA,QAED;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,YAAM,UAAU,EAAE;AAClB,cAAQ,MAAM,OAAO;AACrB,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,SAAS,OAAO,KAAsB,QAA0B;AACpE,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI;AACA,YAAM,cAAc,MAAM,uBAAW,eAAe,QAAQ,gBAAgB;AAC5E,UAAI,KAAK,WAAW;AAAA,IACxB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,cAAc,OAAO,KAAsB,QAA0B;AACzE,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,IAAc;AAEhD,QAAI;AACA,YAAM,OAAO,MAAM,uBAAW,eAAe,QAAQ,QAAQ,IAAI;AACjE,UAAI,KAAK,
|
|
4
|
+
"sourcesContent": ["import { matchMaker } from '@colyseus/core';\n\nimport express from 'express';\nimport { OSUtils } from 'node-os-utils';\n\nimport type { MonitorOptions } from './index.js';\n\nconst osutils = new OSUtils();\n\nconst UNAVAILABLE_ROOM_ERROR = \"@colyseus/monitor: room $roomId is not available anymore.\";\n\nexport function getAPI (opts: Partial<MonitorOptions>): express.Router {\n const api = express.Router();\n\n api.get(\"/\", async (req: express.Request, res: express.Response) => {\n try {\n const rooms: any[] = await matchMaker.query({});\n const columns = opts.columns || ['roomId', 'name', 'clients', 'maxClients', 'locked', 'elapsedTime'];\n\n // extend columns to expose \"publicAddress\", if present\n if (!opts.columns && rooms[0] && rooms[0].publicAddress !== undefined) {\n columns.push(\"publicAddress\");\n }\n\n let connections: number = 0;\n\n const cpuUsage = await osutils.cpu.usage();\n const cpu = (cpuUsage.success) ? cpuUsage.data : NaN;\n\n const memoryInfo = await osutils.memory.info();\n const totalMemMb = (memoryInfo.success) ? memoryInfo.data.total?.toMB() : NaN;\n const usedMemMb = (memoryInfo.success) ? memoryInfo.data.used?.toMB() : NaN;\n\n res.json({\n columns,\n rooms: rooms.map(room => {\n const data = JSON.parse(JSON.stringify(room));\n\n connections += room.clients;\n\n // additional data\n data.locked = room.locked || false;\n data.private = room.private;\n\n data.maxClients = `${room.maxClients}`;\n\n data.elapsedTime = Date.now() - new Date(room.createdAt).getTime();\n return data;\n }),\n\n connections,\n cpu,\n memory: {\n totalMemMb,\n usedMemMb \n },\n });\n } catch (e: any) {\n const message = e.message;\n console.error(message);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n try {\n const inspectData = await matchMaker.remoteRoomCall(roomId, \"getInspectData\");\n res.json(inspectData);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room/call\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n const method = req.query.method as string;\n const args = JSON.parse(req.query.args as string);\n\n try {\n const data = await matchMaker.remoteRoomCall(roomId, method, args);\n res.json(data ?? {});\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n return api;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA2B;AAE3B,qBAAoB;AACpB,2BAAwB;AAIxB,IAAM,UAAU,IAAI,6BAAQ;AAE5B,IAAM,yBAAyB;AAExB,SAAS,OAAQ,MAA+C;AACnE,QAAM,MAAM,eAAAA,QAAQ,OAAO;AAE3B,MAAI,IAAI,KAAK,OAAO,KAAsB,QAA0B;AAdxE;AAeQ,QAAI;AACA,YAAM,QAAe,MAAM,uBAAW,MAAM,CAAC,CAAC;AAC9C,YAAM,UAAU,KAAK,WAAW,CAAC,UAAU,QAAQ,WAAW,cAAc,UAAU,aAAa;AAGnG,UAAI,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAW;AACnE,gBAAQ,KAAK,eAAe;AAAA,MAChC;AAEA,UAAI,cAAsB;AAE1B,YAAM,WAAW,MAAM,QAAQ,IAAI,MAAM;AACzC,YAAM,MAAO,SAAS,UAAW,SAAS,OAAO;AAEjD,YAAM,aAAa,MAAM,QAAQ,OAAO,KAAK;AAC7C,YAAM,aAAc,WAAW,WAAW,gBAAW,KAAK,UAAhB,mBAAuB,SAAS;AAC1E,YAAM,YAAa,WAAW,WAAW,gBAAW,KAAK,SAAhB,mBAAsB,SAAS;AAExE,UAAI,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM,IAAI,UAAQ;AACrB,gBAAM,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAE5C,yBAAe,KAAK;AAGpB,eAAK,SAAS,KAAK,UAAU;AAC7B,eAAK,UAAU,KAAK;AAEpB,eAAK,aAAa,GAAG,KAAK,UAAU;AAEpC,eAAK,cAAc,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AACjE,iBAAO;AAAA,QACX,CAAC;AAAA,QAED;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,YAAM,UAAU,EAAE;AAClB,cAAQ,MAAM,OAAO;AACrB,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,SAAS,OAAO,KAAsB,QAA0B;AACpE,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI;AACA,YAAM,cAAc,MAAM,uBAAW,eAAe,QAAQ,gBAAgB;AAC5E,UAAI,KAAK,WAAW;AAAA,IACxB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,cAAc,OAAO,KAAsB,QAA0B;AACzE,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,IAAc;AAEhD,QAAI;AACA,YAAM,OAAO,MAAM,uBAAW,eAAe,QAAQ,QAAQ,IAAI;AACjE,UAAI,KAAK,sBAAQ,CAAC,CAAC;AAAA,IACvB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;",
|
|
6
6
|
"names": ["express"]
|
|
7
7
|
}
|
package/build/api.mjs
CHANGED
|
@@ -61,7 +61,7 @@ function getAPI(opts) {
|
|
|
61
61
|
const args = JSON.parse(req.query.args);
|
|
62
62
|
try {
|
|
63
63
|
const data = await matchMaker.remoteRoomCall(roomId, method, args);
|
|
64
|
-
res.json(data);
|
|
64
|
+
res.json(data ?? {});
|
|
65
65
|
} catch (e) {
|
|
66
66
|
const message = UNAVAILABLE_ROOM_ERROR.replace("$roomId", roomId);
|
|
67
67
|
res.status(500);
|
package/build/api.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src-backend/api.ts"],
|
|
4
|
-
"sourcesContent": ["import { matchMaker } from '@colyseus/core';\n\nimport express from 'express';\nimport { OSUtils } from 'node-os-utils';\n\nimport type { MonitorOptions } from './index.js';\n\nconst osutils = new OSUtils();\n\nconst UNAVAILABLE_ROOM_ERROR = \"@colyseus/monitor: room $roomId is not available anymore.\";\n\nexport function getAPI (opts: Partial<MonitorOptions>): express.Router {\n const api = express.Router();\n\n api.get(\"/\", async (req: express.Request, res: express.Response) => {\n try {\n const rooms: any[] = await matchMaker.query({});\n const columns = opts.columns || ['roomId', 'name', 'clients', 'maxClients', 'locked', 'elapsedTime'];\n\n // extend columns to expose \"publicAddress\", if present\n if (!opts.columns && rooms[0] && rooms[0].publicAddress !== undefined) {\n columns.push(\"publicAddress\");\n }\n\n let connections: number = 0;\n\n const cpuUsage = await osutils.cpu.usage();\n const cpu = (cpuUsage.success) ? cpuUsage.data : NaN;\n\n const memoryInfo = await osutils.memory.info();\n const totalMemMb = (memoryInfo.success) ? memoryInfo.data.total?.toMB() : NaN;\n const usedMemMb = (memoryInfo.success) ? memoryInfo.data.used?.toMB() : NaN;\n\n res.json({\n columns,\n rooms: rooms.map(room => {\n const data = JSON.parse(JSON.stringify(room));\n\n connections += room.clients;\n\n // additional data\n data.locked = room.locked || false;\n data.private = room.private;\n\n data.maxClients = `${room.maxClients}`;\n\n data.elapsedTime = Date.now() - new Date(room.createdAt).getTime();\n return data;\n }),\n\n connections,\n cpu,\n memory: {\n totalMemMb,\n usedMemMb \n },\n });\n } catch (e: any) {\n const message = e.message;\n console.error(message);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n try {\n const inspectData = await matchMaker.remoteRoomCall(roomId, \"getInspectData\");\n res.json(inspectData);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room/call\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n const method = req.query.method as string;\n const args = JSON.parse(req.query.args as string);\n\n try {\n const data = await matchMaker.remoteRoomCall(roomId, method, args);\n res.json(data);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n return api;\n}\n"],
|
|
5
|
-
"mappings": ";AAAA,SAAS,kBAAkB;AAE3B,OAAO,aAAa;AACpB,SAAS,eAAe;AAIxB,IAAM,UAAU,IAAI,QAAQ;AAE5B,IAAM,yBAAyB;AAExB,SAAS,OAAQ,MAA+C;AACnE,QAAM,MAAM,QAAQ,OAAO;AAE3B,MAAI,IAAI,KAAK,OAAO,KAAsB,QAA0B;AAChE,QAAI;AACA,YAAM,QAAe,MAAM,WAAW,MAAM,CAAC,CAAC;AAC9C,YAAM,UAAU,KAAK,WAAW,CAAC,UAAU,QAAQ,WAAW,cAAc,UAAU,aAAa;AAGnG,UAAI,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAW;AACnE,gBAAQ,KAAK,eAAe;AAAA,MAChC;AAEA,UAAI,cAAsB;AAE1B,YAAM,WAAW,MAAM,QAAQ,IAAI,MAAM;AACzC,YAAM,MAAO,SAAS,UAAW,SAAS,OAAO;AAEjD,YAAM,aAAa,MAAM,QAAQ,OAAO,KAAK;AAC7C,YAAM,aAAc,WAAW,UAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAC1E,YAAM,YAAa,WAAW,UAAW,WAAW,KAAK,MAAM,KAAK,IAAI;AAExE,UAAI,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM,IAAI,UAAQ;AACrB,gBAAM,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAE5C,yBAAe,KAAK;AAGpB,eAAK,SAAS,KAAK,UAAU;AAC7B,eAAK,UAAU,KAAK;AAEpB,eAAK,aAAa,GAAG,KAAK,UAAU;AAEpC,eAAK,cAAc,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AACjE,iBAAO;AAAA,QACX,CAAC;AAAA,QAED;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,YAAM,UAAU,EAAE;AAClB,cAAQ,MAAM,OAAO;AACrB,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,SAAS,OAAO,KAAsB,QAA0B;AACpE,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI;AACA,YAAM,cAAc,MAAM,WAAW,eAAe,QAAQ,gBAAgB;AAC5E,UAAI,KAAK,WAAW;AAAA,IACxB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,cAAc,OAAO,KAAsB,QAA0B;AACzE,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,IAAc;AAEhD,QAAI;AACA,YAAM,OAAO,MAAM,WAAW,eAAe,QAAQ,QAAQ,IAAI;AACjE,UAAI,KAAK,
|
|
4
|
+
"sourcesContent": ["import { matchMaker } from '@colyseus/core';\n\nimport express from 'express';\nimport { OSUtils } from 'node-os-utils';\n\nimport type { MonitorOptions } from './index.js';\n\nconst osutils = new OSUtils();\n\nconst UNAVAILABLE_ROOM_ERROR = \"@colyseus/monitor: room $roomId is not available anymore.\";\n\nexport function getAPI (opts: Partial<MonitorOptions>): express.Router {\n const api = express.Router();\n\n api.get(\"/\", async (req: express.Request, res: express.Response) => {\n try {\n const rooms: any[] = await matchMaker.query({});\n const columns = opts.columns || ['roomId', 'name', 'clients', 'maxClients', 'locked', 'elapsedTime'];\n\n // extend columns to expose \"publicAddress\", if present\n if (!opts.columns && rooms[0] && rooms[0].publicAddress !== undefined) {\n columns.push(\"publicAddress\");\n }\n\n let connections: number = 0;\n\n const cpuUsage = await osutils.cpu.usage();\n const cpu = (cpuUsage.success) ? cpuUsage.data : NaN;\n\n const memoryInfo = await osutils.memory.info();\n const totalMemMb = (memoryInfo.success) ? memoryInfo.data.total?.toMB() : NaN;\n const usedMemMb = (memoryInfo.success) ? memoryInfo.data.used?.toMB() : NaN;\n\n res.json({\n columns,\n rooms: rooms.map(room => {\n const data = JSON.parse(JSON.stringify(room));\n\n connections += room.clients;\n\n // additional data\n data.locked = room.locked || false;\n data.private = room.private;\n\n data.maxClients = `${room.maxClients}`;\n\n data.elapsedTime = Date.now() - new Date(room.createdAt).getTime();\n return data;\n }),\n\n connections,\n cpu,\n memory: {\n totalMemMb,\n usedMemMb \n },\n });\n } catch (e: any) {\n const message = e.message;\n console.error(message);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n try {\n const inspectData = await matchMaker.remoteRoomCall(roomId, \"getInspectData\");\n res.json(inspectData);\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n api.get(\"/room/call\", async (req: express.Request, res: express.Response) => {\n const roomId = req.query.roomId as string;\n const method = req.query.method as string;\n const args = JSON.parse(req.query.args as string);\n\n try {\n const data = await matchMaker.remoteRoomCall(roomId, method, args);\n res.json(data ?? {});\n } catch (e) {\n const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n res.status(500);\n res.json({ message });\n }\n });\n\n return api;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,kBAAkB;AAE3B,OAAO,aAAa;AACpB,SAAS,eAAe;AAIxB,IAAM,UAAU,IAAI,QAAQ;AAE5B,IAAM,yBAAyB;AAExB,SAAS,OAAQ,MAA+C;AACnE,QAAM,MAAM,QAAQ,OAAO;AAE3B,MAAI,IAAI,KAAK,OAAO,KAAsB,QAA0B;AAChE,QAAI;AACA,YAAM,QAAe,MAAM,WAAW,MAAM,CAAC,CAAC;AAC9C,YAAM,UAAU,KAAK,WAAW,CAAC,UAAU,QAAQ,WAAW,cAAc,UAAU,aAAa;AAGnG,UAAI,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAW;AACnE,gBAAQ,KAAK,eAAe;AAAA,MAChC;AAEA,UAAI,cAAsB;AAE1B,YAAM,WAAW,MAAM,QAAQ,IAAI,MAAM;AACzC,YAAM,MAAO,SAAS,UAAW,SAAS,OAAO;AAEjD,YAAM,aAAa,MAAM,QAAQ,OAAO,KAAK;AAC7C,YAAM,aAAc,WAAW,UAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAC1E,YAAM,YAAa,WAAW,UAAW,WAAW,KAAK,MAAM,KAAK,IAAI;AAExE,UAAI,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM,IAAI,UAAQ;AACrB,gBAAM,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAE5C,yBAAe,KAAK;AAGpB,eAAK,SAAS,KAAK,UAAU;AAC7B,eAAK,UAAU,KAAK;AAEpB,eAAK,aAAa,GAAG,KAAK,UAAU;AAEpC,eAAK,cAAc,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AACjE,iBAAO;AAAA,QACX,CAAC;AAAA,QAED;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,YAAM,UAAU,EAAE;AAClB,cAAQ,MAAM,OAAO;AACrB,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,SAAS,OAAO,KAAsB,QAA0B;AACpE,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI;AACA,YAAM,cAAc,MAAM,WAAW,eAAe,QAAQ,gBAAgB;AAC5E,UAAI,KAAK,WAAW;AAAA,IACxB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,cAAc,OAAO,KAAsB,QAA0B;AACzE,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,IAAc;AAEhD,QAAI;AACA,YAAM,OAAO,MAAM,WAAW,eAAe,QAAQ,QAAQ,IAAI;AACjE,UAAI,KAAK,QAAQ,CAAC,CAAC;AAAA,IACvB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/ext/Room.cjs
CHANGED
|
@@ -70,3 +70,40 @@ import_core.Room.prototype._sendMessageToClient = async function(sessionId, type
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
|
+
function getChild(parent, key) {
|
|
74
|
+
if (typeof parent.at === "function" && typeof key === "number") {
|
|
75
|
+
return parent.at(key);
|
|
76
|
+
}
|
|
77
|
+
if (typeof parent.get === "function") {
|
|
78
|
+
return parent.get(String(key));
|
|
79
|
+
}
|
|
80
|
+
return parent[key];
|
|
81
|
+
}
|
|
82
|
+
import_core.Room.prototype._editStateProperty = async function(path, value) {
|
|
83
|
+
let current = this.state;
|
|
84
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
85
|
+
if (current === null || current === void 0) return;
|
|
86
|
+
current = getChild(current, path[i]);
|
|
87
|
+
}
|
|
88
|
+
if (current === null || current === void 0) return;
|
|
89
|
+
const property = path[path.length - 1];
|
|
90
|
+
if (typeof current.set === "function") {
|
|
91
|
+
current.set(String(property), value);
|
|
92
|
+
} else {
|
|
93
|
+
current[property] = value;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
import_core.Room.prototype._deleteStateProperty = async function(path) {
|
|
97
|
+
let current = this.state;
|
|
98
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
99
|
+
if (current === null || current === void 0) return;
|
|
100
|
+
current = getChild(current, path[i]);
|
|
101
|
+
}
|
|
102
|
+
if (current === null || current === void 0) return;
|
|
103
|
+
const property = path[path.length - 1];
|
|
104
|
+
if (typeof current.delete === "function") {
|
|
105
|
+
current.delete(String(property));
|
|
106
|
+
} else {
|
|
107
|
+
current[property] = void 0;
|
|
108
|
+
}
|
|
109
|
+
};
|
package/build/ext/Room.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src-backend/ext/Room.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Monkey-patch Colyseus' default behaviour\n//\nimport { Room, type Client, type ClientPrivate } from \"@colyseus/core\";\n\nfunction getStateSize(room) {\n // TODO: `Serializer<T>` should provide a method for this (e.g. `serializer.hasState()`)\n const hasState = (\n room._serializer.encoder || // schema v3\n room._serializer.state || // schema v2\n room._serializer.previousState // legacy-fossil-delta\n );\n const fullState = hasState && room._serializer.getFullState();\n return fullState && (fullState.byteLength || fullState.length) || 0;\n}\n\n(Room.prototype as any).getAvailableData = function () {\n return {\n clients: this.clients.length,\n maxClients: this.maxClients,\n metadata: this.metadata,\n roomId: this.roomId,\n };\n};\n\n(Room.prototype as any).getRoomListData = async function () {\n const stateSize = getStateSize(this);\n const elapsedTime = this.clock.elapsedTime;\n const locked = this.locked;\n const data = this.getAvailableData();\n\n return { ...data, locked, elapsedTime, stateSize };\n};\n\n(Room.prototype as any).getInspectData = async function () {\n const state = this.state;\n const stateSize = getStateSize(this);\n const roomElapsedTime = this.clock.elapsedTime;\n\n const data = this.getAvailableData();\n const clients = this.clients.map((client: Client & ClientPrivate) => ({\n sessionId: client.sessionId,\n elapsedTime: roomElapsedTime - client._joinedAt\n }));\n const locked = this.locked;\n\n return { ...data, locked, clients, state, stateSize };\n};\n\n// Actions\n(Room.prototype as any)._forceClientDisconnect = async function (sessionId) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].leave();\n break;\n }\n }\n};\n\n(Room.prototype as any)._sendMessageToClient = async function (sessionId, type, data) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].send(type, data);\n break;\n }\n }\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAGA,kBAAsD;AAEtD,SAAS,aAAa,MAAM;AAExB,QAAM,WACJ,KAAK,YAAY;AAAA,EACjB,KAAK,YAAY;AAAA,EACjB,KAAK,YAAY;AAEnB,QAAM,YAAY,YAAY,KAAK,YAAY,aAAa;AAC5D,SAAO,cAAc,UAAU,cAAc,UAAU,WAAW;AACtE;AAEC,iBAAK,UAAkB,mBAAmB,WAAY;AACnD,SAAO;AAAA,IACH,SAAS,KAAK,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,QAAQ,KAAK;AAAA,EACjB;AACJ;AAEC,iBAAK,UAAkB,kBAAkB,iBAAkB;AACxD,QAAM,YAAY,aAAa,IAAI;AACnC,QAAM,cAAc,KAAK,MAAM;AAC/B,QAAM,SAAS,KAAK;AACpB,QAAM,OAAO,KAAK,iBAAiB;AAEnC,SAAO,iCAAK,OAAL,EAAW,QAAQ,aAAa,UAAU;AACrD;AAEC,iBAAK,UAAkB,iBAAiB,iBAAkB;AACvD,QAAM,QAAQ,KAAK;AACnB,QAAM,YAAY,aAAa,IAAI;AACnC,QAAM,kBAAkB,KAAK,MAAM;AAEnC,QAAM,OAAO,KAAK,iBAAiB;AACnC,QAAM,UAAU,KAAK,QAAQ,IAAI,CAAC,YAAoC;AAAA,IAClE,WAAW,OAAO;AAAA,IAClB,aAAa,kBAAkB,OAAO;AAAA,EAC1C,EAAE;AACF,QAAM,SAAS,KAAK;AAEpB,SAAO,iCAAK,OAAL,EAAW,QAAQ,SAAS,OAAO,UAAU;AACxD;AAGC,iBAAK,UAAkB,yBAAyB,eAAgB,WAAW;AACxE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC1C,QAAI,KAAK,QAAQ,CAAC,EAAE,cAAc,WAAW;AACzC,WAAK,QAAQ,CAAC,EAAE,MAAM;AACtB;AAAA,IACJ;AAAA,EACJ;AACJ;AAEC,iBAAK,UAAkB,uBAAuB,eAAgB,WAAW,MAAM,MAAM;AAClF,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC1C,QAAI,KAAK,QAAQ,CAAC,EAAE,cAAc,WAAW;AACzC,WAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,IAAI;AAC/B;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
4
|
+
"sourcesContent": ["//\n// Monkey-patch Colyseus' default behaviour\n//\nimport { Room, type Client, type ClientPrivate } from \"@colyseus/core\";\n\nfunction getStateSize(room) {\n // TODO: `Serializer<T>` should provide a method for this (e.g. `serializer.hasState()`)\n const hasState = (\n room._serializer.encoder || // schema v3\n room._serializer.state || // schema v2\n room._serializer.previousState // legacy-fossil-delta\n );\n const fullState = hasState && room._serializer.getFullState();\n return fullState && (fullState.byteLength || fullState.length) || 0;\n}\n\n(Room.prototype as any).getAvailableData = function () {\n return {\n clients: this.clients.length,\n maxClients: this.maxClients,\n metadata: this.metadata,\n roomId: this.roomId,\n };\n};\n\n(Room.prototype as any).getRoomListData = async function () {\n const stateSize = getStateSize(this);\n const elapsedTime = this.clock.elapsedTime;\n const locked = this.locked;\n const data = this.getAvailableData();\n\n return { ...data, locked, elapsedTime, stateSize };\n};\n\n(Room.prototype as any).getInspectData = async function () {\n const state = this.state;\n const stateSize = getStateSize(this);\n const roomElapsedTime = this.clock.elapsedTime;\n\n const data = this.getAvailableData();\n const clients = this.clients.map((client: Client & ClientPrivate) => ({\n sessionId: client.sessionId,\n elapsedTime: roomElapsedTime - client._joinedAt\n }));\n const locked = this.locked;\n\n return { ...data, locked, clients, state, stateSize };\n};\n\n// Actions\n(Room.prototype as any)._forceClientDisconnect = async function (sessionId) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].leave();\n break;\n }\n }\n};\n\n(Room.prototype as any)._sendMessageToClient = async function (sessionId, type, data) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].send(type, data);\n break;\n }\n }\n};\n\nfunction getChild(parent: any, key: string | number) {\n if (typeof parent.at === 'function' && typeof key === 'number') {\n return parent.at(key);\n }\n if (typeof parent.get === 'function') {\n return parent.get(String(key));\n }\n return parent[key];\n}\n\n(Room.prototype as any)._editStateProperty = async function (path: (string | number)[], value: any) {\n let current = this.state;\n for (let i = 0; i < path.length - 1; i++) {\n if (current === null || current === undefined) return;\n current = getChild(current, path[i]);\n }\n if (current === null || current === undefined) return;\n const property = path[path.length - 1];\n if (typeof current.set === 'function') {\n current.set(String(property), value);\n } else {\n current[property] = value;\n }\n};\n\n(Room.prototype as any)._deleteStateProperty = async function (path: (string | number)[]) {\n let current = this.state;\n for (let i = 0; i < path.length - 1; i++) {\n if (current === null || current === undefined) return;\n current = getChild(current, path[i]);\n }\n if (current === null || current === undefined) return;\n const property = path[path.length - 1];\n if (typeof current.delete === 'function') {\n current.delete(String(property));\n } else {\n current[property] = undefined;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/ext/Room.mjs
CHANGED
|
@@ -50,3 +50,40 @@ Room.prototype._sendMessageToClient = async function(sessionId, type, data) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
|
+
function getChild(parent, key) {
|
|
54
|
+
if (typeof parent.at === "function" && typeof key === "number") {
|
|
55
|
+
return parent.at(key);
|
|
56
|
+
}
|
|
57
|
+
if (typeof parent.get === "function") {
|
|
58
|
+
return parent.get(String(key));
|
|
59
|
+
}
|
|
60
|
+
return parent[key];
|
|
61
|
+
}
|
|
62
|
+
Room.prototype._editStateProperty = async function(path, value) {
|
|
63
|
+
let current = this.state;
|
|
64
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
65
|
+
if (current === null || current === void 0) return;
|
|
66
|
+
current = getChild(current, path[i]);
|
|
67
|
+
}
|
|
68
|
+
if (current === null || current === void 0) return;
|
|
69
|
+
const property = path[path.length - 1];
|
|
70
|
+
if (typeof current.set === "function") {
|
|
71
|
+
current.set(String(property), value);
|
|
72
|
+
} else {
|
|
73
|
+
current[property] = value;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
Room.prototype._deleteStateProperty = async function(path) {
|
|
77
|
+
let current = this.state;
|
|
78
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
79
|
+
if (current === null || current === void 0) return;
|
|
80
|
+
current = getChild(current, path[i]);
|
|
81
|
+
}
|
|
82
|
+
if (current === null || current === void 0) return;
|
|
83
|
+
const property = path[path.length - 1];
|
|
84
|
+
if (typeof current.delete === "function") {
|
|
85
|
+
current.delete(String(property));
|
|
86
|
+
} else {
|
|
87
|
+
current[property] = void 0;
|
|
88
|
+
}
|
|
89
|
+
};
|
package/build/ext/Room.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src-backend/ext/Room.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Monkey-patch Colyseus' default behaviour\n//\nimport { Room, type Client, type ClientPrivate } from \"@colyseus/core\";\n\nfunction getStateSize(room) {\n // TODO: `Serializer<T>` should provide a method for this (e.g. `serializer.hasState()`)\n const hasState = (\n room._serializer.encoder || // schema v3\n room._serializer.state || // schema v2\n room._serializer.previousState // legacy-fossil-delta\n );\n const fullState = hasState && room._serializer.getFullState();\n return fullState && (fullState.byteLength || fullState.length) || 0;\n}\n\n(Room.prototype as any).getAvailableData = function () {\n return {\n clients: this.clients.length,\n maxClients: this.maxClients,\n metadata: this.metadata,\n roomId: this.roomId,\n };\n};\n\n(Room.prototype as any).getRoomListData = async function () {\n const stateSize = getStateSize(this);\n const elapsedTime = this.clock.elapsedTime;\n const locked = this.locked;\n const data = this.getAvailableData();\n\n return { ...data, locked, elapsedTime, stateSize };\n};\n\n(Room.prototype as any).getInspectData = async function () {\n const state = this.state;\n const stateSize = getStateSize(this);\n const roomElapsedTime = this.clock.elapsedTime;\n\n const data = this.getAvailableData();\n const clients = this.clients.map((client: Client & ClientPrivate) => ({\n sessionId: client.sessionId,\n elapsedTime: roomElapsedTime - client._joinedAt\n }));\n const locked = this.locked;\n\n return { ...data, locked, clients, state, stateSize };\n};\n\n// Actions\n(Room.prototype as any)._forceClientDisconnect = async function (sessionId) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].leave();\n break;\n }\n }\n};\n\n(Room.prototype as any)._sendMessageToClient = async function (sessionId, type, data) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].send(type, data);\n break;\n }\n }\n};\n"],
|
|
5
|
-
"mappings": ";AAGA,SAAS,YAA6C;AAEtD,SAAS,aAAa,MAAM;AAExB,QAAM,WACJ,KAAK,YAAY;AAAA,EACjB,KAAK,YAAY;AAAA,EACjB,KAAK,YAAY;AAEnB,QAAM,YAAY,YAAY,KAAK,YAAY,aAAa;AAC5D,SAAO,cAAc,UAAU,cAAc,UAAU,WAAW;AACtE;AAEC,KAAK,UAAkB,mBAAmB,WAAY;AACnD,SAAO;AAAA,IACH,SAAS,KAAK,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,QAAQ,KAAK;AAAA,EACjB;AACJ;AAEC,KAAK,UAAkB,kBAAkB,iBAAkB;AACxD,QAAM,YAAY,aAAa,IAAI;AACnC,QAAM,cAAc,KAAK,MAAM;AAC/B,QAAM,SAAS,KAAK;AACpB,QAAM,OAAO,KAAK,iBAAiB;AAEnC,SAAO,EAAE,GAAG,MAAM,QAAQ,aAAa,UAAU;AACrD;AAEC,KAAK,UAAkB,iBAAiB,iBAAkB;AACvD,QAAM,QAAQ,KAAK;AACnB,QAAM,YAAY,aAAa,IAAI;AACnC,QAAM,kBAAkB,KAAK,MAAM;AAEnC,QAAM,OAAO,KAAK,iBAAiB;AACnC,QAAM,UAAU,KAAK,QAAQ,IAAI,CAAC,YAAoC;AAAA,IAClE,WAAW,OAAO;AAAA,IAClB,aAAa,kBAAkB,OAAO;AAAA,EAC1C,EAAE;AACF,QAAM,SAAS,KAAK;AAEpB,SAAO,EAAE,GAAG,MAAM,QAAQ,SAAS,OAAO,UAAU;AACxD;AAGC,KAAK,UAAkB,yBAAyB,eAAgB,WAAW;AACxE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC1C,QAAI,KAAK,QAAQ,CAAC,EAAE,cAAc,WAAW;AACzC,WAAK,QAAQ,CAAC,EAAE,MAAM;AACtB;AAAA,IACJ;AAAA,EACJ;AACJ;AAEC,KAAK,UAAkB,uBAAuB,eAAgB,WAAW,MAAM,MAAM;AAClF,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC1C,QAAI,KAAK,QAAQ,CAAC,EAAE,cAAc,WAAW;AACzC,WAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,IAAI;AAC/B;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
4
|
+
"sourcesContent": ["//\n// Monkey-patch Colyseus' default behaviour\n//\nimport { Room, type Client, type ClientPrivate } from \"@colyseus/core\";\n\nfunction getStateSize(room) {\n // TODO: `Serializer<T>` should provide a method for this (e.g. `serializer.hasState()`)\n const hasState = (\n room._serializer.encoder || // schema v3\n room._serializer.state || // schema v2\n room._serializer.previousState // legacy-fossil-delta\n );\n const fullState = hasState && room._serializer.getFullState();\n return fullState && (fullState.byteLength || fullState.length) || 0;\n}\n\n(Room.prototype as any).getAvailableData = function () {\n return {\n clients: this.clients.length,\n maxClients: this.maxClients,\n metadata: this.metadata,\n roomId: this.roomId,\n };\n};\n\n(Room.prototype as any).getRoomListData = async function () {\n const stateSize = getStateSize(this);\n const elapsedTime = this.clock.elapsedTime;\n const locked = this.locked;\n const data = this.getAvailableData();\n\n return { ...data, locked, elapsedTime, stateSize };\n};\n\n(Room.prototype as any).getInspectData = async function () {\n const state = this.state;\n const stateSize = getStateSize(this);\n const roomElapsedTime = this.clock.elapsedTime;\n\n const data = this.getAvailableData();\n const clients = this.clients.map((client: Client & ClientPrivate) => ({\n sessionId: client.sessionId,\n elapsedTime: roomElapsedTime - client._joinedAt\n }));\n const locked = this.locked;\n\n return { ...data, locked, clients, state, stateSize };\n};\n\n// Actions\n(Room.prototype as any)._forceClientDisconnect = async function (sessionId) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].leave();\n break;\n }\n }\n};\n\n(Room.prototype as any)._sendMessageToClient = async function (sessionId, type, data) {\n for (let i = 0; i < this.clients.length; i++) {\n if (this.clients[i].sessionId === sessionId) {\n this.clients[i].send(type, data);\n break;\n }\n }\n};\n\nfunction getChild(parent: any, key: string | number) {\n if (typeof parent.at === 'function' && typeof key === 'number') {\n return parent.at(key);\n }\n if (typeof parent.get === 'function') {\n return parent.get(String(key));\n }\n return parent[key];\n}\n\n(Room.prototype as any)._editStateProperty = async function (path: (string | number)[], value: any) {\n let current = this.state;\n for (let i = 0; i < path.length - 1; i++) {\n if (current === null || current === undefined) return;\n current = getChild(current, path[i]);\n }\n if (current === null || current === undefined) return;\n const property = path[path.length - 1];\n if (typeof current.set === 'function') {\n current.set(String(property), value);\n } else {\n current[property] = value;\n }\n};\n\n(Room.prototype as any)._deleteStateProperty = async function (path: (string | number)[]) {\n let current = this.state;\n for (let i = 0; i < path.length - 1; i++) {\n if (current === null || current === undefined) return;\n current = getChild(current, path[i]);\n }\n if (current === null || current === undefined) return;\n const property = path[path.length - 1];\n if (typeof current.delete === 'function') {\n current.delete(String(property));\n } else {\n current[property] = undefined;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
html,body{margin:0;padding:0}
|