@colyseus/core 0.15.51 → 0.15.52
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/README.md +5 -5
- package/build/Room.js +1 -0
- package/build/Room.js.map +2 -2
- package/build/Room.mjs +1 -0
- package/build/Room.mjs.map +2 -2
- package/build/Stats.js +11 -0
- package/build/Stats.js.map +2 -2
- package/build/Stats.mjs +5 -0
- package/build/Stats.mjs.map +2 -2
- package/build/matchmaker/driver/api.d.ts +104 -0
- package/build/matchmaker/driver/api.js +29 -0
- package/build/matchmaker/driver/api.js.map +7 -0
- package/build/matchmaker/driver/api.mjs +7 -0
- package/build/matchmaker/driver/api.mjs.map +7 -0
- package/build/matchmaker/driver/local/LocalDriver.d.ts +13 -0
- package/build/matchmaker/driver/local/LocalDriver.js +65 -0
- package/build/matchmaker/driver/local/LocalDriver.js.map +7 -0
- package/build/matchmaker/driver/local/LocalDriver.mjs +43 -0
- package/build/matchmaker/driver/local/LocalDriver.mjs.map +7 -0
- package/build/matchmaker/driver/local/Query.d.ts +9 -0
- package/build/matchmaker/driver/local/Query.js +78 -0
- package/build/matchmaker/driver/local/Query.js.map +7 -0
- package/build/matchmaker/driver/local/Query.mjs +56 -0
- package/build/matchmaker/driver/local/Query.mjs.map +7 -0
- package/build/matchmaker/driver/local/RoomData.d.ts +19 -0
- package/build/matchmaker/driver/local/RoomData.js +79 -0
- package/build/matchmaker/driver/local/RoomData.js.map +7 -0
- package/build/matchmaker/driver/local/RoomData.mjs +57 -0
- package/build/matchmaker/driver/local/RoomData.mjs.map +7 -0
- package/package.json +1 -1
package/build/Stats.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Stats.ts"],
|
|
4
|
-
"sourcesContent": ["import { presence, processId } from \"./MatchMaker\";\n\nexport type Stats = {\n roomCount: number;\n ccu: number;\n}\n\nexport let local: Stats = {\n roomCount: 0,\n ccu: 0,\n};\n\nexport async function fetchAll() {\n // TODO: cache this value to avoid querying too often\n const allStats: Array<Stats & { processId: string }> = [];\n const allProcesses = await presence.hgetall(getRoomCountKey());\n for (let remoteProcessId in allProcesses) {\n if (remoteProcessId === processId) {\n allStats.push({ processId, roomCount: local.roomCount, ccu: local.ccu, });\n\n } else {\n const [roomCount, ccu] = allProcesses[remoteProcessId].split(',').map(Number);\n allStats.push({ processId: remoteProcessId, roomCount, ccu });\n }\n }\n return allStats;\n}\n\nlet lastPersisted = 0;\nlet persistTimeout = undefined;\nconst persistInterval = 1000;\n\nexport function persist(forceNow: boolean = false) {\n /**\n * Avoid persisting too often.\n */\n const now = Date.now();\n\n if (forceNow || (now - lastPersisted > persistInterval)) {\n lastPersisted = now;\n return presence.hset(getRoomCountKey(), processId, `${local.roomCount},${local.ccu}`);\n\n } else {\n clearTimeout(persistTimeout);\n persistTimeout = setTimeout(persist, persistInterval);\n }\n}\n\nexport function reset(_persist: boolean = true) {\n local.roomCount = 0;\n local.ccu = 0;\n\n if (_persist) {\n lastPersisted = 0;\n clearTimeout(persistTimeout);\n persist();\n }\n}\n\nexport function excludeProcess(_processId: string) {\n return presence.hdel(getRoomCountKey(), _processId);\n}\n\nexport async function getGlobalCCU() {\n const allStats = await fetchAll();\n return allStats.reduce((prev, next) => prev + next.ccu, 0);\n}\n\nfunction getRoomCountKey() {\n return 'roomcount';\n}"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { presence, processId } from \"./MatchMaker\";\n\nexport type Stats = {\n roomCount: number;\n ccu: number;\n}\n\nexport let local: Stats = {\n roomCount: 0,\n ccu: 0,\n};\n\n//\n// Attach local metrics to PM2 (if available)\n//\n// @ts-ignore\nimport('@pm2/io')\n .then((io) => {\n io.default.metric({ id: 'app/stats/ccu', name: 'ccu', value: () => local.ccu });\n io.default.metric({ id: 'app/stats/roomcount', name: 'roomcount', value: () => local.roomCount });\n })\n .catch(() => { });\n\nexport async function fetchAll() {\n // TODO: cache this value to avoid querying too often\n const allStats: Array<Stats & { processId: string }> = [];\n const allProcesses = await presence.hgetall(getRoomCountKey());\n for (let remoteProcessId in allProcesses) {\n if (remoteProcessId === processId) {\n allStats.push({ processId, roomCount: local.roomCount, ccu: local.ccu, });\n\n } else {\n const [roomCount, ccu] = allProcesses[remoteProcessId].split(',').map(Number);\n allStats.push({ processId: remoteProcessId, roomCount, ccu });\n }\n }\n return allStats;\n}\n\nlet lastPersisted = 0;\nlet persistTimeout = undefined;\nconst persistInterval = 1000;\n\nexport function persist(forceNow: boolean = false) {\n /**\n * Avoid persisting too often.\n */\n const now = Date.now();\n\n if (forceNow || (now - lastPersisted > persistInterval)) {\n lastPersisted = now;\n return presence.hset(getRoomCountKey(), processId, `${local.roomCount},${local.ccu}`);\n\n } else {\n clearTimeout(persistTimeout);\n persistTimeout = setTimeout(persist, persistInterval);\n }\n}\n\nexport function reset(_persist: boolean = true) {\n local.roomCount = 0;\n local.ccu = 0;\n\n if (_persist) {\n lastPersisted = 0;\n clearTimeout(persistTimeout);\n persist();\n }\n}\n\nexport function excludeProcess(_processId: string) {\n return presence.hdel(getRoomCountKey(), _processId);\n}\n\nexport async function getGlobalCCU() {\n const allStats = await fetchAll();\n return allStats.reduce((prev, next) => prev + next.ccu, 0);\n}\n\nfunction getRoomCountKey() {\n return 'roomcount';\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAoC;AAO7B,IAAI,QAAe;AAAA,EACxB,WAAW;AAAA,EACX,KAAK;AACP;AAMA,OAAO,WACJ,KAAK,CAAC,OAAO;AACZ,KAAG,QAAQ,OAAO,EAAE,IAAI,iBAAiB,MAAM,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAC9E,KAAG,QAAQ,OAAO,EAAE,IAAI,uBAAuB,MAAM,aAAa,OAAO,MAAM,MAAM,UAAU,CAAC;AAClG,CAAC,EACA,MAAM,MAAM;AAAE,CAAC;AAElB,eAAsB,WAAW;AAE/B,QAAM,WAAiD,CAAC;AACxD,QAAM,eAAe,MAAM,2BAAS,QAAQ,gBAAgB,CAAC;AAC7D,WAAS,mBAAmB,cAAc;AACxC,QAAI,oBAAoB,6BAAW;AACjC,eAAS,KAAK,EAAE,wCAAW,WAAW,MAAM,WAAW,KAAK,MAAM,IAAK,CAAC;AAAA,IAE1E,OAAO;AACL,YAAM,CAAC,WAAW,GAAG,IAAI,aAAa,iBAAiB,MAAM,GAAG,EAAE,IAAI,MAAM;AAC5E,eAAS,KAAK,EAAE,WAAW,iBAAiB,WAAW,IAAI,CAAC;AAAA,IAC9D;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AACrB,MAAM,kBAAkB;AAEjB,SAAS,QAAQ,WAAoB,OAAO;AAIjD,QAAM,MAAM,KAAK,IAAI;AAErB,MAAI,YAAa,MAAM,gBAAgB,iBAAkB;AACvD,oBAAgB;AAChB,WAAO,2BAAS,KAAK,gBAAgB,GAAG,6BAAW,GAAG,MAAM,aAAa,MAAM,KAAK;AAAA,EAEtF,OAAO;AACL,iBAAa,cAAc;AAC3B,qBAAiB,WAAW,SAAS,eAAe;AAAA,EACtD;AACF;AAEO,SAAS,MAAM,WAAoB,MAAM;AAC9C,QAAM,YAAY;AAClB,QAAM,MAAM;AAEZ,MAAI,UAAU;AACZ,oBAAgB;AAChB,iBAAa,cAAc;AAC3B,YAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,YAAoB;AACjD,SAAO,2BAAS,KAAK,gBAAgB,GAAG,UAAU;AACpD;AAEA,eAAsB,eAAe;AACnC,QAAM,WAAW,MAAM,SAAS;AAChC,SAAO,SAAS,OAAO,CAAC,MAAM,SAAS,OAAO,KAAK,KAAK,CAAC;AAC3D;AAEA,SAAS,kBAAkB;AACzB,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/Stats.mjs
CHANGED
|
@@ -3,6 +3,11 @@ let local = {
|
|
|
3
3
|
roomCount: 0,
|
|
4
4
|
ccu: 0
|
|
5
5
|
};
|
|
6
|
+
import("@pm2/io").then((io) => {
|
|
7
|
+
io.default.metric({ id: "app/stats/ccu", name: "ccu", value: () => local.ccu });
|
|
8
|
+
io.default.metric({ id: "app/stats/roomcount", name: "roomcount", value: () => local.roomCount });
|
|
9
|
+
}).catch(() => {
|
|
10
|
+
});
|
|
6
11
|
async function fetchAll() {
|
|
7
12
|
const allStats = [];
|
|
8
13
|
const allProcesses = await presence.hgetall(getRoomCountKey());
|
package/build/Stats.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Stats.ts"],
|
|
4
|
-
"sourcesContent": ["import { presence, processId } from \"./MatchMaker\";\n\nexport type Stats = {\n roomCount: number;\n ccu: number;\n}\n\nexport let local: Stats = {\n roomCount: 0,\n ccu: 0,\n};\n\nexport async function fetchAll() {\n // TODO: cache this value to avoid querying too often\n const allStats: Array<Stats & { processId: string }> = [];\n const allProcesses = await presence.hgetall(getRoomCountKey());\n for (let remoteProcessId in allProcesses) {\n if (remoteProcessId === processId) {\n allStats.push({ processId, roomCount: local.roomCount, ccu: local.ccu, });\n\n } else {\n const [roomCount, ccu] = allProcesses[remoteProcessId].split(',').map(Number);\n allStats.push({ processId: remoteProcessId, roomCount, ccu });\n }\n }\n return allStats;\n}\n\nlet lastPersisted = 0;\nlet persistTimeout = undefined;\nconst persistInterval = 1000;\n\nexport function persist(forceNow: boolean = false) {\n /**\n * Avoid persisting too often.\n */\n const now = Date.now();\n\n if (forceNow || (now - lastPersisted > persistInterval)) {\n lastPersisted = now;\n return presence.hset(getRoomCountKey(), processId, `${local.roomCount},${local.ccu}`);\n\n } else {\n clearTimeout(persistTimeout);\n persistTimeout = setTimeout(persist, persistInterval);\n }\n}\n\nexport function reset(_persist: boolean = true) {\n local.roomCount = 0;\n local.ccu = 0;\n\n if (_persist) {\n lastPersisted = 0;\n clearTimeout(persistTimeout);\n persist();\n }\n}\n\nexport function excludeProcess(_processId: string) {\n return presence.hdel(getRoomCountKey(), _processId);\n}\n\nexport async function getGlobalCCU() {\n const allStats = await fetchAll();\n return allStats.reduce((prev, next) => prev + next.ccu, 0);\n}\n\nfunction getRoomCountKey() {\n return 'roomcount';\n}"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,iBAAiB;AAO7B,IAAI,QAAe;AAAA,EACxB,WAAW;AAAA,EACX,KAAK;AACP;
|
|
4
|
+
"sourcesContent": ["import { presence, processId } from \"./MatchMaker\";\n\nexport type Stats = {\n roomCount: number;\n ccu: number;\n}\n\nexport let local: Stats = {\n roomCount: 0,\n ccu: 0,\n};\n\n//\n// Attach local metrics to PM2 (if available)\n//\n// @ts-ignore\nimport('@pm2/io')\n .then((io) => {\n io.default.metric({ id: 'app/stats/ccu', name: 'ccu', value: () => local.ccu });\n io.default.metric({ id: 'app/stats/roomcount', name: 'roomcount', value: () => local.roomCount });\n })\n .catch(() => { });\n\nexport async function fetchAll() {\n // TODO: cache this value to avoid querying too often\n const allStats: Array<Stats & { processId: string }> = [];\n const allProcesses = await presence.hgetall(getRoomCountKey());\n for (let remoteProcessId in allProcesses) {\n if (remoteProcessId === processId) {\n allStats.push({ processId, roomCount: local.roomCount, ccu: local.ccu, });\n\n } else {\n const [roomCount, ccu] = allProcesses[remoteProcessId].split(',').map(Number);\n allStats.push({ processId: remoteProcessId, roomCount, ccu });\n }\n }\n return allStats;\n}\n\nlet lastPersisted = 0;\nlet persistTimeout = undefined;\nconst persistInterval = 1000;\n\nexport function persist(forceNow: boolean = false) {\n /**\n * Avoid persisting too often.\n */\n const now = Date.now();\n\n if (forceNow || (now - lastPersisted > persistInterval)) {\n lastPersisted = now;\n return presence.hset(getRoomCountKey(), processId, `${local.roomCount},${local.ccu}`);\n\n } else {\n clearTimeout(persistTimeout);\n persistTimeout = setTimeout(persist, persistInterval);\n }\n}\n\nexport function reset(_persist: boolean = true) {\n local.roomCount = 0;\n local.ccu = 0;\n\n if (_persist) {\n lastPersisted = 0;\n clearTimeout(persistTimeout);\n persist();\n }\n}\n\nexport function excludeProcess(_processId: string) {\n return presence.hdel(getRoomCountKey(), _processId);\n}\n\nexport async function getGlobalCCU() {\n const allStats = await fetchAll();\n return allStats.reduce((prev, next) => prev + next.ccu, 0);\n}\n\nfunction getRoomCountKey() {\n return 'roomcount';\n}"],
|
|
5
|
+
"mappings": "AAAA,SAAS,UAAU,iBAAiB;AAO7B,IAAI,QAAe;AAAA,EACxB,WAAW;AAAA,EACX,KAAK;AACP;AAMA,OAAO,WACJ,KAAK,CAAC,OAAO;AACZ,KAAG,QAAQ,OAAO,EAAE,IAAI,iBAAiB,MAAM,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAC9E,KAAG,QAAQ,OAAO,EAAE,IAAI,uBAAuB,MAAM,aAAa,OAAO,MAAM,MAAM,UAAU,CAAC;AAClG,CAAC,EACA,MAAM,MAAM;AAAE,CAAC;AAElB,eAAsB,WAAW;AAE/B,QAAM,WAAiD,CAAC;AACxD,QAAM,eAAe,MAAM,SAAS,QAAQ,gBAAgB,CAAC;AAC7D,WAAS,mBAAmB,cAAc;AACxC,QAAI,oBAAoB,WAAW;AACjC,eAAS,KAAK,EAAE,WAAW,WAAW,MAAM,WAAW,KAAK,MAAM,IAAK,CAAC;AAAA,IAE1E,OAAO;AACL,YAAM,CAAC,WAAW,GAAG,IAAI,aAAa,iBAAiB,MAAM,GAAG,EAAE,IAAI,MAAM;AAC5E,eAAS,KAAK,EAAE,WAAW,iBAAiB,WAAW,IAAI,CAAC;AAAA,IAC9D;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AACrB,MAAM,kBAAkB;AAEjB,SAAS,QAAQ,WAAoB,OAAO;AAIjD,QAAM,MAAM,KAAK,IAAI;AAErB,MAAI,YAAa,MAAM,gBAAgB,iBAAkB;AACvD,oBAAgB;AAChB,WAAO,SAAS,KAAK,gBAAgB,GAAG,WAAW,GAAG,MAAM,aAAa,MAAM,KAAK;AAAA,EAEtF,OAAO;AACL,iBAAa,cAAc;AAC3B,qBAAiB,WAAW,SAAS,eAAe;AAAA,EACtD;AACF;AAEO,SAAS,MAAM,WAAoB,MAAM;AAC9C,QAAM,YAAY;AAClB,QAAM,MAAM;AAEZ,MAAI,UAAU;AACZ,oBAAgB;AAChB,iBAAa,cAAc;AAC3B,YAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,YAAoB;AACjD,SAAO,SAAS,KAAK,gBAAgB,GAAG,UAAU;AACpD;AAEA,eAAsB,eAAe;AACnC,QAAM,WAAW,MAAM,SAAS;AAChC,SAAO,SAAS,OAAO,CAAC,MAAM,SAAS,OAAO,KAAK,KAAK,CAAC;AAC3D;AAEA,SAAS,kBAAkB;AACzB,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export interface SortOptions {
|
|
2
|
+
[fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';
|
|
3
|
+
}
|
|
4
|
+
export declare function getLockId(filterOptions: any): string;
|
|
5
|
+
export interface IRoomCache {
|
|
6
|
+
/**
|
|
7
|
+
* Unique identifier for the room.
|
|
8
|
+
*/
|
|
9
|
+
roomId: string;
|
|
10
|
+
/**
|
|
11
|
+
* Number of clients connected to this room.
|
|
12
|
+
*/
|
|
13
|
+
clients: number;
|
|
14
|
+
/**
|
|
15
|
+
* Maximum number of clients allowed to join the room.
|
|
16
|
+
*/
|
|
17
|
+
maxClients: number;
|
|
18
|
+
/**
|
|
19
|
+
* Indicates if the room is locked (i.e. join requests are rejected).
|
|
20
|
+
*/
|
|
21
|
+
locked: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Indicates if the room is private
|
|
24
|
+
* Private rooms can't be joined via `join()` or `joinOrCreate()`.
|
|
25
|
+
*/
|
|
26
|
+
private: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Room name.
|
|
29
|
+
*/
|
|
30
|
+
name: string;
|
|
31
|
+
/**
|
|
32
|
+
* Public address of the server.
|
|
33
|
+
*/
|
|
34
|
+
publicAddress?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Process id where the room is running.
|
|
37
|
+
*/
|
|
38
|
+
processId: string;
|
|
39
|
+
/**
|
|
40
|
+
* Do not show this room in lobby listing.
|
|
41
|
+
*/
|
|
42
|
+
unlisted: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Metadata associated with the room.
|
|
45
|
+
*/
|
|
46
|
+
metadata: any;
|
|
47
|
+
/**
|
|
48
|
+
* Additional custom properties
|
|
49
|
+
*/
|
|
50
|
+
[property: string]: any;
|
|
51
|
+
}
|
|
52
|
+
export interface RoomCache<Metadata = any> extends IRoomCache {
|
|
53
|
+
metadata: Metadata;
|
|
54
|
+
updateOne(operations: any): any;
|
|
55
|
+
save(): any;
|
|
56
|
+
remove(): any;
|
|
57
|
+
}
|
|
58
|
+
export interface MatchMakerDriver {
|
|
59
|
+
/**
|
|
60
|
+
* Initialize a room cache which contains CRUD operations for room listings.
|
|
61
|
+
*
|
|
62
|
+
* @param initialValues - Predefined room properties.
|
|
63
|
+
*
|
|
64
|
+
* @returns RoomData - New room cache.
|
|
65
|
+
*/
|
|
66
|
+
createInstance(initialValues: Partial<IRoomCache>): RoomCache;
|
|
67
|
+
/**
|
|
68
|
+
* Check if a room exists in room cache.
|
|
69
|
+
*
|
|
70
|
+
* @param roomId - The room id.
|
|
71
|
+
*
|
|
72
|
+
* @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.
|
|
73
|
+
*/
|
|
74
|
+
has(roomId: string): Promise<boolean> | boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Query rooms in room cache for given conditions.
|
|
77
|
+
*
|
|
78
|
+
* @param conditions - Filtering conditions.
|
|
79
|
+
*
|
|
80
|
+
* @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.
|
|
81
|
+
*/
|
|
82
|
+
query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<IRoomCache[]> | IRoomCache[];
|
|
83
|
+
/**
|
|
84
|
+
* Clean up rooms in room cache by process id.
|
|
85
|
+
* @param processId - The process id.
|
|
86
|
+
*/
|
|
87
|
+
cleanup?(processId: string): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Query for a room in room cache for given conditions.
|
|
90
|
+
*
|
|
91
|
+
* @param conditions - Filtering conditions.
|
|
92
|
+
*
|
|
93
|
+
* @returns `IRoomCache` - An object contaning filtered room metadata.
|
|
94
|
+
*/
|
|
95
|
+
findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<RoomCache>;
|
|
96
|
+
/**
|
|
97
|
+
* Empty the room cache.
|
|
98
|
+
*/
|
|
99
|
+
clear(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Dispose the connection of the room cache medium.
|
|
102
|
+
*/
|
|
103
|
+
shutdown(): void;
|
|
104
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var api_exports = {};
|
|
19
|
+
__export(api_exports, {
|
|
20
|
+
getLockId: () => getLockId
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(api_exports);
|
|
23
|
+
function getLockId(filterOptions) {
|
|
24
|
+
return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join("-");
|
|
25
|
+
}
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {
|
|
28
|
+
getLockId
|
|
29
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/matchmaker/driver/api.ts"],
|
|
4
|
+
"sourcesContent": ["export interface SortOptions {\n [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';\n}\n\nexport function getLockId(filterOptions: any) {\n return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join(\"-\");\n}\n\nexport interface IRoomCache {\n /**\n * Unique identifier for the room.\n */\n roomId: string;\n\n /**\n * Number of clients connected to this room.\n */\n clients: number;\n\n /**\n * Maximum number of clients allowed to join the room.\n */\n maxClients: number;\n\n /**\n * Indicates if the room is locked (i.e. join requests are rejected).\n */\n locked: boolean;\n\n /**\n * Indicates if the room is private\n * Private rooms can't be joined via `join()` or `joinOrCreate()`.\n */\n private: boolean;\n\n /**\n * Room name.\n */\n name: string;\n\n /**\n * Public address of the server.\n */\n publicAddress?: string;\n\n /**\n * Process id where the room is running.\n */\n processId: string;\n\n /**\n * Do not show this room in lobby listing.\n */\n unlisted: boolean;\n\n /**\n * Metadata associated with the room.\n */\n metadata: any;\n\n /**\n * Additional custom properties\n */\n [property: string]: any;\n}\n\nexport interface RoomCache<Metadata= any> extends IRoomCache {\n metadata: Metadata;\n\n updateOne(operations: any);\n save();\n remove();\n}\n\nexport interface MatchMakerDriver {\n /**\n * Initialize a room cache which contains CRUD operations for room listings.\n *\n * @param initialValues - Predefined room properties.\n *\n * @returns RoomData - New room cache.\n */\n createInstance(initialValues: Partial<IRoomCache>): RoomCache;\n\n /**\n * Check if a room exists in room cache.\n *\n * @param roomId - The room id.\n *\n * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.\n */\n has(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Query rooms in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.\n */\n query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions,): Promise<IRoomCache[]> | IRoomCache[];\n\n /**\n * Clean up rooms in room cache by process id.\n * @param processId - The process id.\n */\n cleanup?(processId: string): Promise<void>;\n\n /**\n * Query for a room in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns `IRoomCache` - An object contaning filtered room metadata.\n */\n findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<RoomCache>;\n\n /**\n * Empty the room cache.\n */\n clear(): void;\n\n /**\n * Dispose the connection of the room cache medium.\n */\n shutdown(): void;\n\n // /**\n // *\n // */\n // lock(): void;\n\n // /**\n // *\n // */\n // releaseLock(): void;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,SAAS,UAAU,eAAoB;AAC5C,SAAO,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AACzF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/matchmaker/driver/api.ts"],
|
|
4
|
+
"sourcesContent": ["export interface SortOptions {\n [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';\n}\n\nexport function getLockId(filterOptions: any) {\n return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join(\"-\");\n}\n\nexport interface IRoomCache {\n /**\n * Unique identifier for the room.\n */\n roomId: string;\n\n /**\n * Number of clients connected to this room.\n */\n clients: number;\n\n /**\n * Maximum number of clients allowed to join the room.\n */\n maxClients: number;\n\n /**\n * Indicates if the room is locked (i.e. join requests are rejected).\n */\n locked: boolean;\n\n /**\n * Indicates if the room is private\n * Private rooms can't be joined via `join()` or `joinOrCreate()`.\n */\n private: boolean;\n\n /**\n * Room name.\n */\n name: string;\n\n /**\n * Public address of the server.\n */\n publicAddress?: string;\n\n /**\n * Process id where the room is running.\n */\n processId: string;\n\n /**\n * Do not show this room in lobby listing.\n */\n unlisted: boolean;\n\n /**\n * Metadata associated with the room.\n */\n metadata: any;\n\n /**\n * Additional custom properties\n */\n [property: string]: any;\n}\n\nexport interface RoomCache<Metadata= any> extends IRoomCache {\n metadata: Metadata;\n\n updateOne(operations: any);\n save();\n remove();\n}\n\nexport interface MatchMakerDriver {\n /**\n * Initialize a room cache which contains CRUD operations for room listings.\n *\n * @param initialValues - Predefined room properties.\n *\n * @returns RoomData - New room cache.\n */\n createInstance(initialValues: Partial<IRoomCache>): RoomCache;\n\n /**\n * Check if a room exists in room cache.\n *\n * @param roomId - The room id.\n *\n * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.\n */\n has(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Query rooms in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.\n */\n query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions,): Promise<IRoomCache[]> | IRoomCache[];\n\n /**\n * Clean up rooms in room cache by process id.\n * @param processId - The process id.\n */\n cleanup?(processId: string): Promise<void>;\n\n /**\n * Query for a room in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns `IRoomCache` - An object contaning filtered room metadata.\n */\n findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<RoomCache>;\n\n /**\n * Empty the room cache.\n */\n clear(): void;\n\n /**\n * Dispose the connection of the room cache medium.\n */\n shutdown(): void;\n\n // /**\n // *\n // */\n // lock(): void;\n\n // /**\n // *\n // */\n // releaseLock(): void;\n}\n"],
|
|
5
|
+
"mappings": ";AAIO,SAAS,UAAU,eAAoB;AAC5C,SAAO,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AACzF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IRoomCache, SortOptions, RoomCache, MatchMakerDriver } from '../api.js';
|
|
2
|
+
export type { IRoomCache, SortOptions, RoomCache, MatchMakerDriver };
|
|
3
|
+
import { RoomData } from './RoomData.js';
|
|
4
|
+
export declare class LocalDriver implements MatchMakerDriver {
|
|
5
|
+
rooms: IRoomCache[];
|
|
6
|
+
createInstance(initialValues?: any): RoomData;
|
|
7
|
+
has(roomId: string): boolean;
|
|
8
|
+
query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): RoomCache<any>[];
|
|
9
|
+
cleanup(processId: string): Promise<void>;
|
|
10
|
+
findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<RoomCache>;
|
|
11
|
+
clear(): void;
|
|
12
|
+
shutdown(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var LocalDriver_exports = {};
|
|
19
|
+
__export(LocalDriver_exports, {
|
|
20
|
+
LocalDriver: () => LocalDriver
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(LocalDriver_exports);
|
|
23
|
+
var import_Logger = require("../../../Logger.js");
|
|
24
|
+
var import_Query = require("./Query.js");
|
|
25
|
+
var import_RoomData = require("./RoomData.js");
|
|
26
|
+
class LocalDriver {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.rooms = [];
|
|
29
|
+
}
|
|
30
|
+
createInstance(initialValues = {}) {
|
|
31
|
+
return new import_RoomData.RoomData(initialValues, this.rooms);
|
|
32
|
+
}
|
|
33
|
+
has(roomId) {
|
|
34
|
+
return this.rooms.some((room) => room.roomId === roomId);
|
|
35
|
+
}
|
|
36
|
+
query(conditions, sortOptions) {
|
|
37
|
+
const query = new import_Query.Query(this.rooms, conditions);
|
|
38
|
+
if (sortOptions) {
|
|
39
|
+
query.sort(sortOptions);
|
|
40
|
+
}
|
|
41
|
+
return query.filter(conditions);
|
|
42
|
+
}
|
|
43
|
+
cleanup(processId) {
|
|
44
|
+
const cachedRooms = this.query({ processId });
|
|
45
|
+
import_Logger.logger.debug("> Removing stale rooms by processId:", processId, `(${cachedRooms.length} rooms found)`);
|
|
46
|
+
cachedRooms.forEach((room) => room.remove());
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
}
|
|
49
|
+
findOne(conditions, sortOptions) {
|
|
50
|
+
const query = new import_Query.Query(this.rooms, conditions);
|
|
51
|
+
if (sortOptions) {
|
|
52
|
+
query.sort(sortOptions);
|
|
53
|
+
}
|
|
54
|
+
return query;
|
|
55
|
+
}
|
|
56
|
+
clear() {
|
|
57
|
+
this.rooms = [];
|
|
58
|
+
}
|
|
59
|
+
shutdown() {
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
+
0 && (module.exports = {
|
|
64
|
+
LocalDriver
|
|
65
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
|
|
4
|
+
"sourcesContent": ["import { logger } from '../../../Logger.js';\nimport { IRoomCache, SortOptions, RoomCache, MatchMakerDriver } from '../api.js';\n\n// re-export\nexport type { IRoomCache, SortOptions, RoomCache, MatchMakerDriver };\n\nimport { Query } from './Query.js';\nimport { RoomData } from './RoomData.js';\n\nexport class LocalDriver implements MatchMakerDriver {\n public rooms: IRoomCache[] = [];\n\n public createInstance(initialValues: any = {}) {\n return new RoomData(initialValues, this.rooms);\n }\n\n public has(roomId: string) {\n return this.rooms.some((room) => room.roomId === roomId);\n }\n\n public query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<RoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query.filter(conditions);\n }\n\n public cleanup(processId: string) {\n const cachedRooms = this.query({ processId });\n logger.debug(\"> Removing stale rooms by processId:\", processId, `(${cachedRooms.length} rooms found)`);\n\n cachedRooms.forEach((room) => room.remove());\n return Promise.resolve();\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<RoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query as unknown as Promise<RoomCache>;\n }\n\n public clear() {\n this.rooms = [];\n }\n\n public shutdown() {\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAMvB,mBAAsB;AACtB,sBAAyB;AAElB,MAAM,YAAwC;AAAA,EAA9C;AACL,SAAO,QAAsB,CAAC;AAAA;AAAA,EAEvB,eAAe,gBAAqB,CAAC,GAAG;AAC7C,WAAO,IAAI,yBAAS,eAAe,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEO,IAAI,QAAgB;AACzB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EACzD;AAAA,EAEO,MAAM,YAAiC,aAA2B;AACvE,UAAM,QAAQ,IAAI,mBAAiB,KAAK,OAAO,UAAU;AAEzD,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO,MAAM,OAAO,UAAU;AAAA,EAChC;AAAA,EAEO,QAAQ,WAAmB;AAChC,UAAM,cAAc,KAAK,MAAM,EAAE,UAAU,CAAC;AAC5C,yBAAO,MAAM,wCAAwC,WAAW,IAAI,YAAY,MAAM,eAAe;AAErG,gBAAY,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;AAC3C,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAQ,YAAiC,aAA2B;AACzE,UAAM,QAAQ,IAAI,mBAAiB,KAAK,OAAO,UAAU;AAEzD,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ,CAAC;AAAA,EAChB;AAAA,EAEO,WAAW;AAAA,EAClB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// packages/core/src/matchmaker/driver/local/LocalDriver.ts
|
|
2
|
+
import { logger } from "../../../Logger.mjs";
|
|
3
|
+
import { Query } from "./Query.mjs";
|
|
4
|
+
import { RoomData } from "./RoomData.mjs";
|
|
5
|
+
var LocalDriver = class {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.rooms = [];
|
|
8
|
+
}
|
|
9
|
+
createInstance(initialValues = {}) {
|
|
10
|
+
return new RoomData(initialValues, this.rooms);
|
|
11
|
+
}
|
|
12
|
+
has(roomId) {
|
|
13
|
+
return this.rooms.some((room) => room.roomId === roomId);
|
|
14
|
+
}
|
|
15
|
+
query(conditions, sortOptions) {
|
|
16
|
+
const query = new Query(this.rooms, conditions);
|
|
17
|
+
if (sortOptions) {
|
|
18
|
+
query.sort(sortOptions);
|
|
19
|
+
}
|
|
20
|
+
return query.filter(conditions);
|
|
21
|
+
}
|
|
22
|
+
cleanup(processId) {
|
|
23
|
+
const cachedRooms = this.query({ processId });
|
|
24
|
+
logger.debug("> Removing stale rooms by processId:", processId, `(${cachedRooms.length} rooms found)`);
|
|
25
|
+
cachedRooms.forEach((room) => room.remove());
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
findOne(conditions, sortOptions) {
|
|
29
|
+
const query = new Query(this.rooms, conditions);
|
|
30
|
+
if (sortOptions) {
|
|
31
|
+
query.sort(sortOptions);
|
|
32
|
+
}
|
|
33
|
+
return query;
|
|
34
|
+
}
|
|
35
|
+
clear() {
|
|
36
|
+
this.rooms = [];
|
|
37
|
+
}
|
|
38
|
+
shutdown() {
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
LocalDriver
|
|
43
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
|
|
4
|
+
"sourcesContent": ["import { logger } from '../../../Logger.js';\nimport { IRoomCache, SortOptions, RoomCache, MatchMakerDriver } from '../api.js';\n\n// re-export\nexport type { IRoomCache, SortOptions, RoomCache, MatchMakerDriver };\n\nimport { Query } from './Query.js';\nimport { RoomData } from './RoomData.js';\n\nexport class LocalDriver implements MatchMakerDriver {\n public rooms: IRoomCache[] = [];\n\n public createInstance(initialValues: any = {}) {\n return new RoomData(initialValues, this.rooms);\n }\n\n public has(roomId: string) {\n return this.rooms.some((room) => room.roomId === roomId);\n }\n\n public query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<RoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query.filter(conditions);\n }\n\n public cleanup(processId: string) {\n const cachedRooms = this.query({ processId });\n logger.debug(\"> Removing stale rooms by processId:\", processId, `(${cachedRooms.length} rooms found)`);\n\n cachedRooms.forEach((room) => room.remove());\n return Promise.resolve();\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<RoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query as unknown as Promise<RoomCache>;\n }\n\n public clear() {\n this.rooms = [];\n }\n\n public shutdown() {\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,cAAc;AAMvB,SAAS,aAAa;AACtB,SAAS,gBAAgB;AAElB,IAAM,cAAN,MAA8C;AAAA,EAA9C;AACL,SAAO,QAAsB,CAAC;AAAA;AAAA,EAEvB,eAAe,gBAAqB,CAAC,GAAG;AAC7C,WAAO,IAAI,SAAS,eAAe,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEO,IAAI,QAAgB;AACzB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EACzD;AAAA,EAEO,MAAM,YAAiC,aAA2B;AACvE,UAAM,QAAQ,IAAI,MAAiB,KAAK,OAAO,UAAU;AAEzD,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO,MAAM,OAAO,UAAU;AAAA,EAChC;AAAA,EAEO,QAAQ,WAAmB;AAChC,UAAM,cAAc,KAAK,MAAM,EAAE,UAAU,CAAC;AAC5C,WAAO,MAAM,wCAAwC,WAAW,IAAI,YAAY,MAAM,eAAe;AAErG,gBAAY,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;AAC3C,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAQ,YAAiC,aAA2B;AACzE,UAAM,QAAQ,IAAI,MAAiB,KAAK,OAAO,UAAU;AAEzD,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ,CAAC;AAAA,EAChB;AAAA,EAEO,WAAW;AAAA,EAClB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SortOptions } from '../api.js';
|
|
2
|
+
export declare class Query<T> {
|
|
3
|
+
private $rooms;
|
|
4
|
+
private conditions;
|
|
5
|
+
constructor(rooms: any[], conditions: any);
|
|
6
|
+
sort(options: SortOptions): void;
|
|
7
|
+
filter(conditions: any): T[];
|
|
8
|
+
then(resolve: any, reject: any): any;
|
|
9
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var Query_exports = {};
|
|
19
|
+
__export(Query_exports, {
|
|
20
|
+
Query: () => Query
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(Query_exports);
|
|
23
|
+
class Query {
|
|
24
|
+
constructor(rooms, conditions) {
|
|
25
|
+
this.$rooms = rooms.slice(0);
|
|
26
|
+
this.conditions = conditions;
|
|
27
|
+
}
|
|
28
|
+
sort(options) {
|
|
29
|
+
this.$rooms = this.$rooms.sort((room1, room2) => {
|
|
30
|
+
for (const field in options) {
|
|
31
|
+
if (options.hasOwnProperty(field)) {
|
|
32
|
+
const direction = options[field];
|
|
33
|
+
const isAscending = direction === 1 || direction === "asc" || direction === "ascending";
|
|
34
|
+
if (isAscending) {
|
|
35
|
+
if (room1[field] > room2[field]) {
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
if (room1[field] < room2[field]) {
|
|
39
|
+
return -1;
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
if (room1[field] > room2[field]) {
|
|
43
|
+
return -1;
|
|
44
|
+
}
|
|
45
|
+
if (room1[field] < room2[field]) {
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
filter(conditions) {
|
|
54
|
+
return this.$rooms.filter((room) => {
|
|
55
|
+
for (const field in conditions) {
|
|
56
|
+
if (conditions.hasOwnProperty(field) && room[field] !== conditions[field]) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
then(resolve, reject) {
|
|
64
|
+
const result = this.$rooms.find((room) => {
|
|
65
|
+
for (const field in this.conditions) {
|
|
66
|
+
if (this.conditions.hasOwnProperty(field) && room[field] !== this.conditions[field]) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
});
|
|
72
|
+
return resolve(result);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
Query
|
|
78
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
|
|
4
|
+
"sourcesContent": ["import { SortOptions } from '../api.js';\n\nexport class Query<T> {\n private $rooms: T[];\n private conditions: any;\n\n constructor(rooms: any[], conditions) {\n this.$rooms = rooms.slice(0);\n this.conditions = conditions;\n }\n\n public sort(options: SortOptions) {\n this.$rooms = this.$rooms.sort((room1, room2) => {\n for (const field in options) {\n if (options.hasOwnProperty(field)) {\n const direction = options[field];\n const isAscending = (direction === 1 || direction === 'asc' || direction === 'ascending');\n\n if (isAscending) {\n if (room1[field] > room2[field]) { return 1; }\n if (room1[field] < room2[field]) { return -1; }\n\n } else {\n if (room1[field] > room2[field]) { return -1; }\n if (room1[field] < room2[field]) { return 1; }\n }\n }\n }\n });\n }\n\n public filter(conditions: any) {\n return this.$rooms.filter(((room) => {\n for (const field in conditions) {\n if (\n conditions.hasOwnProperty(field) &&\n room[field] !== conditions[field]\n ) {\n return false;\n }\n }\n return true;\n }));\n\n }\n\n public then(resolve, reject) {\n const result: any = this.$rooms.find(((room) => {\n for (const field in this.conditions) {\n if (\n this.conditions.hasOwnProperty(field) &&\n room[field] !== this.conditions[field]\n ) {\n return false;\n }\n }\n return true;\n }));\n return resolve(result);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,MAAS;AAAA,EAIpB,YAAY,OAAc,YAAY;AACpC,SAAK,SAAS,MAAM,MAAM,CAAC;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,KAAK,SAAsB;AAChC,SAAK,SAAS,KAAK,OAAO,KAAK,CAAC,OAAO,UAAU;AAC/C,iBAAW,SAAS,SAAS;AAC3B,YAAI,QAAQ,eAAe,KAAK,GAAG;AACjC,gBAAM,YAAY,QAAQ,KAAK;AAC/B,gBAAM,cAAe,cAAc,KAAK,cAAc,SAAS,cAAc;AAE7E,cAAI,aAAa;AACf,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC7C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAEhD,OAAO;AACL,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAC9C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,YAAiB;AAC7B,WAAO,KAAK,OAAO,OAAQ,CAAC,SAAS;AACnC,iBAAW,SAAS,YAAY;AAC9B,YACE,WAAW,eAAe,KAAK,KAC/B,KAAK,KAAK,MAAM,WAAW,KAAK,GAChC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AAAA,EAEJ;AAAA,EAEO,KAAK,SAAS,QAAQ;AAC3B,UAAM,SAAc,KAAK,OAAO,KAAM,CAAC,SAAS;AAC9C,iBAAW,SAAS,KAAK,YAAY;AACnC,YACE,KAAK,WAAW,eAAe,KAAK,KACpC,KAAK,KAAK,MAAM,KAAK,WAAW,KAAK,GACrC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AACF,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// packages/core/src/matchmaker/driver/local/Query.ts
|
|
2
|
+
var Query = class {
|
|
3
|
+
constructor(rooms, conditions) {
|
|
4
|
+
this.$rooms = rooms.slice(0);
|
|
5
|
+
this.conditions = conditions;
|
|
6
|
+
}
|
|
7
|
+
sort(options) {
|
|
8
|
+
this.$rooms = this.$rooms.sort((room1, room2) => {
|
|
9
|
+
for (const field in options) {
|
|
10
|
+
if (options.hasOwnProperty(field)) {
|
|
11
|
+
const direction = options[field];
|
|
12
|
+
const isAscending = direction === 1 || direction === "asc" || direction === "ascending";
|
|
13
|
+
if (isAscending) {
|
|
14
|
+
if (room1[field] > room2[field]) {
|
|
15
|
+
return 1;
|
|
16
|
+
}
|
|
17
|
+
if (room1[field] < room2[field]) {
|
|
18
|
+
return -1;
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
if (room1[field] > room2[field]) {
|
|
22
|
+
return -1;
|
|
23
|
+
}
|
|
24
|
+
if (room1[field] < room2[field]) {
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
filter(conditions) {
|
|
33
|
+
return this.$rooms.filter((room) => {
|
|
34
|
+
for (const field in conditions) {
|
|
35
|
+
if (conditions.hasOwnProperty(field) && room[field] !== conditions[field]) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
then(resolve, reject) {
|
|
43
|
+
const result = this.$rooms.find((room) => {
|
|
44
|
+
for (const field in this.conditions) {
|
|
45
|
+
if (this.conditions.hasOwnProperty(field) && room[field] !== this.conditions[field]) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
});
|
|
51
|
+
return resolve(result);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
Query
|
|
56
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
|
|
4
|
+
"sourcesContent": ["import { SortOptions } from '../api.js';\n\nexport class Query<T> {\n private $rooms: T[];\n private conditions: any;\n\n constructor(rooms: any[], conditions) {\n this.$rooms = rooms.slice(0);\n this.conditions = conditions;\n }\n\n public sort(options: SortOptions) {\n this.$rooms = this.$rooms.sort((room1, room2) => {\n for (const field in options) {\n if (options.hasOwnProperty(field)) {\n const direction = options[field];\n const isAscending = (direction === 1 || direction === 'asc' || direction === 'ascending');\n\n if (isAscending) {\n if (room1[field] > room2[field]) { return 1; }\n if (room1[field] < room2[field]) { return -1; }\n\n } else {\n if (room1[field] > room2[field]) { return -1; }\n if (room1[field] < room2[field]) { return 1; }\n }\n }\n }\n });\n }\n\n public filter(conditions: any) {\n return this.$rooms.filter(((room) => {\n for (const field in conditions) {\n if (\n conditions.hasOwnProperty(field) &&\n room[field] !== conditions[field]\n ) {\n return false;\n }\n }\n return true;\n }));\n\n }\n\n public then(resolve, reject) {\n const result: any = this.$rooms.find(((room) => {\n for (const field in this.conditions) {\n if (\n this.conditions.hasOwnProperty(field) &&\n room[field] !== this.conditions[field]\n ) {\n return false;\n }\n }\n return true;\n }));\n return resolve(result);\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEO,IAAM,QAAN,MAAe;AAAA,EAIpB,YAAY,OAAc,YAAY;AACpC,SAAK,SAAS,MAAM,MAAM,CAAC;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,KAAK,SAAsB;AAChC,SAAK,SAAS,KAAK,OAAO,KAAK,CAAC,OAAO,UAAU;AAC/C,iBAAW,SAAS,SAAS;AAC3B,YAAI,QAAQ,eAAe,KAAK,GAAG;AACjC,gBAAM,YAAY,QAAQ,KAAK;AAC/B,gBAAM,cAAe,cAAc,KAAK,cAAc,SAAS,cAAc;AAE7E,cAAI,aAAa;AACf,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC7C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAEhD,OAAO;AACL,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAC9C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,YAAiB;AAC7B,WAAO,KAAK,OAAO,OAAQ,CAAC,SAAS;AACnC,iBAAW,SAAS,YAAY;AAC9B,YACE,WAAW,eAAe,KAAK,KAC/B,KAAK,KAAK,MAAM,WAAW,KAAK,GAChC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AAAA,EAEJ;AAAA,EAEO,KAAK,SAAS,QAAQ;AAC3B,UAAM,SAAc,KAAK,OAAO,KAAM,CAAC,SAAS;AAC9C,iBAAW,SAAS,KAAK,YAAY;AACnC,YACE,KAAK,WAAW,eAAe,KAAK,KACpC,KAAK,KAAK,MAAM,KAAK,WAAW,KAAK,GACrC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AACF,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RoomCache, IRoomCache } from '../api.js';
|
|
2
|
+
export declare class RoomData implements RoomCache {
|
|
3
|
+
clients: number;
|
|
4
|
+
locked: boolean;
|
|
5
|
+
private: boolean;
|
|
6
|
+
maxClients: number;
|
|
7
|
+
metadata: any;
|
|
8
|
+
name: string;
|
|
9
|
+
publicAddress: string;
|
|
10
|
+
processId: string;
|
|
11
|
+
roomId: string;
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
unlisted: boolean;
|
|
14
|
+
private $rooms;
|
|
15
|
+
constructor(initialValues: any, rooms: IRoomCache[]);
|
|
16
|
+
save(): void;
|
|
17
|
+
updateOne(operations: any): void;
|
|
18
|
+
remove(): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var RoomData_exports = {};
|
|
19
|
+
__export(RoomData_exports, {
|
|
20
|
+
RoomData: () => RoomData
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(RoomData_exports);
|
|
23
|
+
var import_Utils = require("../../../utils/Utils.js");
|
|
24
|
+
class RoomData {
|
|
25
|
+
constructor(initialValues, rooms) {
|
|
26
|
+
this.clients = 0;
|
|
27
|
+
this.locked = false;
|
|
28
|
+
this.private = false;
|
|
29
|
+
this.maxClients = Infinity;
|
|
30
|
+
this.unlisted = false;
|
|
31
|
+
this.createdAt = /* @__PURE__ */ new Date();
|
|
32
|
+
for (const field in initialValues) {
|
|
33
|
+
if (initialValues.hasOwnProperty(field)) {
|
|
34
|
+
this[field] = initialValues[field];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
Object.defineProperty(this, "$rooms", {
|
|
38
|
+
value: rooms,
|
|
39
|
+
enumerable: false,
|
|
40
|
+
writable: true
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
save() {
|
|
44
|
+
if (this.$rooms.indexOf(this) === -1) {
|
|
45
|
+
this.$rooms.push(this);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
updateOne(operations) {
|
|
49
|
+
if (operations.$set) {
|
|
50
|
+
for (const field in operations.$set) {
|
|
51
|
+
if (operations.$set.hasOwnProperty(field)) {
|
|
52
|
+
this[field] = operations.$set[field];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (operations.$inc) {
|
|
57
|
+
for (const field in operations.$inc) {
|
|
58
|
+
if (operations.$inc.hasOwnProperty(field)) {
|
|
59
|
+
this[field] += operations.$inc[field];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
remove() {
|
|
65
|
+
if (!this.$rooms) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const roomIndex = this.$rooms.indexOf(this);
|
|
69
|
+
if (roomIndex === -1) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
(0, import_Utils.spliceOne)(this.$rooms, roomIndex);
|
|
73
|
+
this.$rooms = null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
77
|
+
0 && (module.exports = {
|
|
78
|
+
RoomData
|
|
79
|
+
});
|