@colyseus/core 0.16.0-preview.29 → 0.16.0-preview.30
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/Debug.js +2 -2
- package/build/Debug.js.map +1 -1
- package/build/Debug.mjs +11 -10
- package/build/Debug.mjs.map +2 -2
- package/build/IPC.d.ts +1 -1
- package/build/IPC.js +3 -3
- package/build/IPC.js.map +1 -1
- package/build/IPC.mjs +4 -3
- package/build/IPC.mjs.map +2 -2
- package/build/Logger.mjs +4 -3
- package/build/Logger.mjs.map +1 -1
- package/build/MatchMaker.d.ts +11 -11
- package/build/MatchMaker.js +16 -16
- package/build/MatchMaker.js.map +1 -1
- package/build/MatchMaker.mjs +28 -27
- package/build/MatchMaker.mjs.map +2 -2
- package/build/Protocol.mjs +3 -2
- package/build/Protocol.mjs.map +1 -1
- package/build/Room.d.ts +6 -6
- package/build/Room.js +10 -10
- package/build/Room.js.map +1 -1
- package/build/Room.mjs +18 -17
- package/build/Room.mjs.map +2 -2
- package/build/Server.d.ts +6 -6
- package/build/Server.js +9 -9
- package/build/Server.js.map +1 -1
- package/build/Server.mjs +14 -13
- package/build/Server.mjs.map +3 -3
- package/build/Stats.js +1 -1
- package/build/Stats.js.map +1 -1
- package/build/Stats.mjs +6 -5
- package/build/Stats.mjs.map +2 -2
- package/build/Transport.js +1 -1
- package/build/Transport.js.map +1 -1
- package/build/Transport.mjs +6 -5
- package/build/Transport.mjs.map +2 -2
- package/build/discovery/index.d.ts +1 -1
- package/build/discovery/index.js.map +1 -1
- package/build/discovery/index.mjs +3 -2
- package/build/discovery/index.mjs.map +2 -2
- package/build/errors/SeatReservationError.mjs +3 -2
- package/build/errors/SeatReservationError.mjs.map +1 -1
- package/build/errors/ServerError.js +1 -1
- package/build/errors/ServerError.js.map +1 -1
- package/build/errors/ServerError.mjs +5 -4
- package/build/errors/ServerError.mjs.map +2 -2
- package/build/index.d.ts +20 -19
- package/build/index.js +23 -18
- package/build/index.js.map +2 -2
- package/build/index.mjs +21 -17
- package/build/index.mjs.map +2 -2
- package/build/matchmaker/Lobby.d.ts +2 -2
- package/build/matchmaker/Lobby.js +1 -1
- package/build/matchmaker/Lobby.js.map +1 -1
- package/build/matchmaker/Lobby.mjs +3 -2
- package/build/matchmaker/Lobby.mjs.map +2 -2
- package/build/matchmaker/RegisteredHandler.d.ts +3 -3
- package/build/matchmaker/RegisteredHandler.js +2 -7
- package/build/matchmaker/RegisteredHandler.js.map +2 -2
- package/build/matchmaker/RegisteredHandler.mjs +6 -10
- package/build/matchmaker/RegisteredHandler.mjs.map +2 -2
- package/build/matchmaker/controller.d.ts +3 -3
- package/build/matchmaker/controller.js +3 -3
- package/build/matchmaker/controller.js.map +1 -1
- package/build/matchmaker/controller.mjs +4 -3
- package/build/matchmaker/controller.mjs.map +2 -2
- package/build/matchmaker/driver/api.mjs +1 -0
- package/build/matchmaker/driver/api.mjs.map +1 -1
- package/build/matchmaker/driver/local/LocalDriver.d.ts +2 -2
- package/build/matchmaker/driver/local/LocalDriver.js +3 -3
- package/build/matchmaker/driver/local/LocalDriver.js.map +1 -1
- package/build/matchmaker/driver/local/LocalDriver.mjs +6 -5
- package/build/matchmaker/driver/local/LocalDriver.mjs.map +2 -2
- package/build/matchmaker/driver/local/Query.d.ts +1 -1
- package/build/matchmaker/driver/local/Query.js.map +1 -1
- package/build/matchmaker/driver/local/Query.mjs +3 -2
- package/build/matchmaker/driver/local/Query.mjs.map +2 -2
- package/build/matchmaker/driver/local/RoomData.d.ts +1 -1
- package/build/matchmaker/driver/local/RoomData.js +1 -1
- package/build/matchmaker/driver/local/RoomData.js.map +1 -1
- package/build/matchmaker/driver/local/RoomData.mjs +4 -3
- package/build/matchmaker/driver/local/RoomData.mjs.map +2 -2
- package/build/presence/LocalPresence.d.ts +1 -1
- package/build/presence/LocalPresence.js +2 -2
- package/build/presence/LocalPresence.js.map +1 -1
- package/build/presence/LocalPresence.mjs +6 -5
- package/build/presence/LocalPresence.mjs.map +2 -2
- package/build/rooms/LobbyRoom.d.ts +3 -3
- package/build/rooms/LobbyRoom.js +3 -3
- package/build/rooms/LobbyRoom.js.map +1 -1
- package/build/rooms/LobbyRoom.mjs +6 -5
- package/build/rooms/LobbyRoom.mjs.map +2 -2
- package/build/rooms/RelayRoom.d.ts +2 -2
- package/build/rooms/RelayRoom.js +1 -1
- package/build/rooms/RelayRoom.js.map +1 -1
- package/build/rooms/RelayRoom.mjs +8 -7
- package/build/rooms/RelayRoom.mjs.map +2 -2
- package/build/serializer/NoneSerializer.d.ts +2 -2
- package/build/serializer/NoneSerializer.js.map +1 -1
- package/build/serializer/NoneSerializer.mjs +3 -2
- package/build/serializer/NoneSerializer.mjs.map +2 -2
- package/build/serializer/SchemaSerializer.d.ts +2 -2
- package/build/serializer/SchemaSerializer.js +3 -3
- package/build/serializer/SchemaSerializer.js.map +1 -1
- package/build/serializer/SchemaSerializer.mjs +7 -6
- package/build/serializer/SchemaSerializer.mjs.map +2 -2
- package/build/serializer/Serializer.d.ts +1 -1
- package/build/serializer/Serializer.js.map +1 -1
- package/build/utils/DevMode.d.ts +2 -2
- package/build/utils/DevMode.js +3 -3
- package/build/utils/DevMode.js.map +1 -1
- package/build/utils/DevMode.mjs +6 -5
- package/build/utils/DevMode.mjs.map +2 -2
- package/build/utils/Utils.js +1 -1
- package/build/utils/Utils.js.map +2 -2
- package/build/utils/Utils.mjs +11 -10
- package/build/utils/Utils.mjs.map +2 -2
- package/package.json +8 -2
|
@@ -1,12 +1,8 @@
|
|
|
1
|
+
// packages/core/src/matchmaker/RegisteredHandler.ts
|
|
1
2
|
import { EventEmitter } from "events";
|
|
2
|
-
import { logger } from "../Logger";
|
|
3
|
-
import { updateLobby } from "./Lobby";
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
ColyseusAuth = require("@colyseus/auth");
|
|
7
|
-
} catch (e) {
|
|
8
|
-
}
|
|
9
|
-
const INVALID_OPTION_KEYS = [
|
|
3
|
+
import { logger } from "../Logger.mjs";
|
|
4
|
+
import { updateLobby } from "./Lobby.mjs";
|
|
5
|
+
var INVALID_OPTION_KEYS = [
|
|
10
6
|
"clients",
|
|
11
7
|
"locked",
|
|
12
8
|
"private",
|
|
@@ -16,7 +12,7 @@ const INVALID_OPTION_KEYS = [
|
|
|
16
12
|
"processId",
|
|
17
13
|
"roomId"
|
|
18
14
|
];
|
|
19
|
-
|
|
15
|
+
var RegisteredHandler = class extends EventEmitter {
|
|
20
16
|
constructor(name, klass, options) {
|
|
21
17
|
super();
|
|
22
18
|
this.name = name;
|
|
@@ -63,7 +59,7 @@ class RegisteredHandler extends EventEmitter {
|
|
|
63
59
|
return prev;
|
|
64
60
|
}, {});
|
|
65
61
|
}
|
|
66
|
-
}
|
|
62
|
+
};
|
|
67
63
|
export {
|
|
68
64
|
INVALID_OPTION_KEYS,
|
|
69
65
|
RegisteredHandler
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/RegisteredHandler.ts"],
|
|
4
|
-
"sourcesContent": ["import { IncomingMessage } from 'http';\nimport { EventEmitter } from 'events';\nimport { logger } from '../Logger';\nimport { RoomCache, SortOptions } from './driver/api';\n\nimport { Room } from './../Room';\nimport { updateLobby } from './Lobby';\nimport { Type } from '../utils/types';\n\
|
|
5
|
-
"mappings": "AACA,SAAS,oBAAoB;AAC7B,SAAS,cAAc;AAIvB,SAAS,mBAAmB;
|
|
4
|
+
"sourcesContent": ["import { IncomingMessage } from 'http';\nimport { EventEmitter } from 'events';\nimport { logger } from '../Logger.js';\nimport { RoomCache, SortOptions } from './driver/api.js';\n\nimport { Room } from './../Room.js';\nimport { updateLobby } from './Lobby.js';\nimport { Type } from '../utils/types.js';\n\nexport const INVALID_OPTION_KEYS: Array<keyof RoomCache> = [\n 'clients',\n 'locked',\n 'private',\n // 'maxClients', - maxClients can be useful as filter options\n 'metadata',\n 'name',\n 'processId',\n 'roomId',\n];\n\nexport type ValidateAuthTokenCallback = (token: string, request?: IncomingMessage) => Promise<any>;\n\nexport class RegisteredHandler extends EventEmitter {\n public filterOptions: string[] = [];\n public sortOptions?: SortOptions;\n\n constructor(\n public name: string,\n public klass: Type<Room>,\n public options: any\n ) {\n super();\n\n if (typeof(klass) !== 'function') {\n logger.debug('You are likely not importing your room class correctly.');\n throw new Error(`class is expected but ${typeof(klass)} was provided.`);\n }\n }\n\n public enableRealtimeListing() {\n this.on('create', (room) => updateLobby(room));\n this.on('lock', (room) => updateLobby(room));\n this.on('unlock', (room) => updateLobby(room));\n this.on('join', (room) => updateLobby(room));\n this.on('leave', (room, _, willDispose) => {\n if (!willDispose) {\n updateLobby(room);\n }\n });\n this.on('dispose', (room) => updateLobby(room, false));\n this.on('visibility-change', (room, isVisible) => updateLobby(room, isVisible));\n\n return this;\n }\n\n public filterBy(options: string[]) {\n this.filterOptions = options;\n return this;\n }\n\n public sortBy(options: SortOptions) {\n this.sortOptions = options;\n return this;\n }\n\n public getFilterOptions(options: any) {\n return this.filterOptions.reduce((prev, curr, i, arr) => {\n const field = arr[i];\n if (options.hasOwnProperty(field)) {\n if (INVALID_OPTION_KEYS.indexOf(field as any) !== -1) {\n logger.warn(`option \"${field}\" has internal usage and is going to be ignored.`);\n\n } else {\n prev[field] = options[field];\n }\n }\n return prev;\n }, {});\n }\n}\n"],
|
|
5
|
+
"mappings": ";AACA,SAAS,oBAAoB;AAC7B,SAAS,cAAc;AAIvB,SAAS,mBAAmB;AAGrB,IAAM,sBAA8C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,oBAAN,cAAgC,aAAa;AAAA,EAIlD,YACS,MACA,OACA,SACP;AACA,UAAM;AAJC;AACA;AACA;AANT,SAAO,gBAA0B,CAAC;AAUhC,QAAI,OAAO,UAAW,YAAY;AAChC,aAAO,MAAM,yDAAyD;AACtE,YAAM,IAAI,MAAM,yBAAyB,OAAO,KAAM,gBAAgB;AAAA,IACxE;AAAA,EACF;AAAA,EAEO,wBAAwB;AAC7B,SAAK,GAAG,UAAU,CAAC,SAAS,YAAY,IAAI,CAAC;AAC7C,SAAK,GAAG,QAAQ,CAAC,SAAS,YAAY,IAAI,CAAC;AAC3C,SAAK,GAAG,UAAU,CAAC,SAAS,YAAY,IAAI,CAAC;AAC7C,SAAK,GAAG,QAAQ,CAAC,SAAS,YAAY,IAAI,CAAC;AAC3C,SAAK,GAAG,SAAS,CAAC,MAAM,GAAG,gBAAgB;AACzC,UAAI,CAAC,aAAa;AAChB,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF,CAAC;AACD,SAAK,GAAG,WAAW,CAAC,SAAS,YAAY,MAAM,KAAK,CAAC;AACrD,SAAK,GAAG,qBAAqB,CAAC,MAAM,cAAc,YAAY,MAAM,SAAS,CAAC;AAE9E,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,SAAmB;AACjC,SAAK,gBAAgB;AACrB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,SAAsB;AAClC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEO,iBAAiB,SAAc;AACpC,WAAO,KAAK,cAAc,OAAO,CAAC,MAAM,MAAM,GAAG,QAAQ;AACvD,YAAM,QAAQ,IAAI,CAAC;AACnB,UAAI,QAAQ,eAAe,KAAK,GAAG;AACjC,YAAI,oBAAoB,QAAQ,KAAY,MAAM,IAAI;AACpD,iBAAO,KAAK,WAAW,KAAK,kDAAkD;AAAA,QAEhF,OAAO;AACL,eAAK,KAAK,IAAI,QAAQ,KAAK;AAAA,QAC7B;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Matchmaking controller
|
|
3
3
|
* (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)
|
|
4
4
|
*/
|
|
5
|
-
import { IncomingMessage } from
|
|
6
|
-
import * as matchMaker from
|
|
5
|
+
import { IncomingMessage } from 'http';
|
|
6
|
+
import * as matchMaker from '../MatchMaker.js';
|
|
7
7
|
declare const _default: {
|
|
8
8
|
DEFAULT_CORS_HEADERS: {
|
|
9
9
|
'Access-Control-Allow-Headers': string;
|
|
@@ -32,7 +32,7 @@ declare const _default: {
|
|
|
32
32
|
getCorsHeaders(req: IncomingMessage): {
|
|
33
33
|
[header: string]: string;
|
|
34
34
|
};
|
|
35
|
-
getAvailableRooms(roomName: string): Promise<import("
|
|
35
|
+
getAvailableRooms(roomName: string): Promise<import("./driver/api.js").IRoomCache[]>;
|
|
36
36
|
invokeMethod(method: string, roomName: string, clientOptions?: matchMaker.ClientOptions, authOptions?: matchMaker.AuthOptions): Promise<any>;
|
|
37
37
|
};
|
|
38
38
|
export default _default;
|
|
@@ -30,9 +30,9 @@ __export(controller_exports, {
|
|
|
30
30
|
default: () => controller_default
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(controller_exports);
|
|
33
|
-
var import_Protocol = require("../Protocol");
|
|
34
|
-
var import_ServerError = require("../errors/ServerError");
|
|
35
|
-
var matchMaker = __toESM(require("../MatchMaker"));
|
|
33
|
+
var import_Protocol = require("../Protocol.js");
|
|
34
|
+
var import_ServerError = require("../errors/ServerError.js");
|
|
35
|
+
var matchMaker = __toESM(require("../MatchMaker.js"));
|
|
36
36
|
var controller_default = {
|
|
37
37
|
DEFAULT_CORS_HEADERS: {
|
|
38
38
|
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/controller.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Matchmaking controller\n * (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)\n */\n\nimport { IncomingMessage } from
|
|
4
|
+
"sourcesContent": ["/**\n * Matchmaking controller\n * (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)\n */\n\nimport { IncomingMessage } from 'http';\nimport { ErrorCode } from '../Protocol.js';\nimport { ServerError } from '../errors/ServerError.js';\nimport * as matchMaker from '../MatchMaker.js';\n\nexport default {\n DEFAULT_CORS_HEADERS: {\n 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',\n 'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',\n 'Access-Control-Allow-Credentials': 'true',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Max-Age': '2592000',\n // ...\n },\n\n exposedMethods: ['joinOrCreate', 'create', 'join', 'joinById', 'reconnect'],\n allowedRoomNameChars: /([a-zA-Z_\\-0-9]+)/gi,\n matchmakeRoute: 'matchmake',\n\n /**\n * You can manually change the default corsHeaders by overwriting the `getCorsHeaders()` method:\n * ```\n * import { matchMaker } from \"@colyseus/core\";\n * matchMaker.controller.getCorsHeaders = function(req) {\n * if (req.headers.referer !== \"xxx\") {\n * }\n *\n * return {\n * 'Access-Control-Allow-Origin': 'safedomain.com',\n * }\n * }\n * ```\n */\n getCorsHeaders(req: IncomingMessage): { [header: string]: string } {\n const origin = (req.headers && req.headers['origin']) || (req as any).getHeader && (req as any).getHeader('origin');\n return {\n ['Access-Control-Allow-Origin']: origin || \"*\",\n };\n },\n\n getAvailableRooms(roomName: string) {\n /**\n * list public & unlocked rooms\n */\n const conditions: any = {\n locked: false,\n private: false,\n };\n if (roomName) {\n conditions[\"name\"] = roomName;\n }\n return matchMaker.query(conditions);\n },\n\n async invokeMethod(\n method: string,\n roomName: string,\n clientOptions: matchMaker.ClientOptions = {},\n authOptions?: matchMaker.AuthOptions,\n ) {\n if (this.exposedMethods.indexOf(method) === -1) {\n throw new ServerError(ErrorCode.MATCHMAKE_NO_HANDLER, `invalid method \"${method}\"`);\n }\n\n try {\n return await matchMaker[method](roomName, clientOptions, authOptions);\n\n } catch (e) {\n throw new ServerError(e.code || ErrorCode.MATCHMAKE_UNHANDLED, e.message);\n }\n }\n\n}\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,sBAA0B;AAC1B,yBAA4B;AAC5B,iBAA4B;AAE5B,IAAO,qBAAQ;AAAA,EACb,sBAAsB;AAAA,IACpB,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,0BAA0B;AAAA;AAAA,EAE5B;AAAA,EAEA,gBAAgB,CAAC,gBAAgB,UAAU,QAAQ,YAAY,WAAW;AAAA,EAC1E,sBAAsB;AAAA,EACtB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBhB,eAAe,KAAoD;AACjE,UAAM,SAAU,IAAI,WAAW,IAAI,QAAQ,QAAQ,KAAO,IAAY,aAAc,IAAY,UAAU,QAAQ;AAClH,WAAO;AAAA,MACL,CAAC,6BAA6B,GAAG,UAAU;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkB;AAIlC,UAAM,aAAkB;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AACA,QAAI,UAAU;AACZ,iBAAW,MAAM,IAAI;AAAA,IACvB;AACA,WAAO,WAAW,MAAM,UAAU;AAAA,EACpC;AAAA,EAEA,MAAM,aACJ,QACA,UACA,gBAA0C,CAAC,GAC3C,aACA;AACA,QAAI,KAAK,eAAe,QAAQ,MAAM,MAAM,IAAI;AAC9C,YAAM,IAAI,+BAAY,0BAAU,sBAAsB,mBAAmB,MAAM,GAAG;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,MAAM,WAAW,MAAM,EAAE,UAAU,eAAe,WAAW;AAAA,IAEtE,SAAS,GAAG;AACV,YAAM,IAAI,+BAAY,EAAE,QAAQ,0BAAU,qBAAqB,EAAE,OAAO;AAAA,IAC1E;AAAA,EACF;AAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
// packages/core/src/matchmaker/controller.ts
|
|
2
|
+
import { ErrorCode } from "../Protocol.mjs";
|
|
3
|
+
import { ServerError } from "../errors/ServerError.mjs";
|
|
4
|
+
import * as matchMaker from "../MatchMaker.mjs";
|
|
4
5
|
var controller_default = {
|
|
5
6
|
DEFAULT_CORS_HEADERS: {
|
|
6
7
|
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/controller.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Matchmaking controller\n * (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)\n */\n\nimport { IncomingMessage } from
|
|
5
|
-
"mappings": "AAMA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,YAAY,gBAAgB;AAE5B,IAAO,qBAAQ;AAAA,EACb,sBAAsB;AAAA,IACpB,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,0BAA0B;AAAA;AAAA,EAE5B;AAAA,EAEA,gBAAgB,CAAC,gBAAgB,UAAU,QAAQ,YAAY,WAAW;AAAA,EAC1E,sBAAsB;AAAA,EACtB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBhB,eAAe,KAAoD;AACjE,UAAM,SAAU,IAAI,WAAW,IAAI,QAAQ,QAAQ,KAAO,IAAY,aAAc,IAAY,UAAU,QAAQ;AAClH,WAAO;AAAA,MACL,CAAC,6BAA6B,GAAG,UAAU;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkB;AAIlC,UAAM,aAAkB;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AACA,QAAI,UAAU;AACZ,iBAAW,MAAM,IAAI;AAAA,IACvB;AACA,
|
|
4
|
+
"sourcesContent": ["/**\n * Matchmaking controller\n * (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)\n */\n\nimport { IncomingMessage } from 'http';\nimport { ErrorCode } from '../Protocol.js';\nimport { ServerError } from '../errors/ServerError.js';\nimport * as matchMaker from '../MatchMaker.js';\n\nexport default {\n DEFAULT_CORS_HEADERS: {\n 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',\n 'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',\n 'Access-Control-Allow-Credentials': 'true',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Max-Age': '2592000',\n // ...\n },\n\n exposedMethods: ['joinOrCreate', 'create', 'join', 'joinById', 'reconnect'],\n allowedRoomNameChars: /([a-zA-Z_\\-0-9]+)/gi,\n matchmakeRoute: 'matchmake',\n\n /**\n * You can manually change the default corsHeaders by overwriting the `getCorsHeaders()` method:\n * ```\n * import { matchMaker } from \"@colyseus/core\";\n * matchMaker.controller.getCorsHeaders = function(req) {\n * if (req.headers.referer !== \"xxx\") {\n * }\n *\n * return {\n * 'Access-Control-Allow-Origin': 'safedomain.com',\n * }\n * }\n * ```\n */\n getCorsHeaders(req: IncomingMessage): { [header: string]: string } {\n const origin = (req.headers && req.headers['origin']) || (req as any).getHeader && (req as any).getHeader('origin');\n return {\n ['Access-Control-Allow-Origin']: origin || \"*\",\n };\n },\n\n getAvailableRooms(roomName: string) {\n /**\n * list public & unlocked rooms\n */\n const conditions: any = {\n locked: false,\n private: false,\n };\n if (roomName) {\n conditions[\"name\"] = roomName;\n }\n return matchMaker.query(conditions);\n },\n\n async invokeMethod(\n method: string,\n roomName: string,\n clientOptions: matchMaker.ClientOptions = {},\n authOptions?: matchMaker.AuthOptions,\n ) {\n if (this.exposedMethods.indexOf(method) === -1) {\n throw new ServerError(ErrorCode.MATCHMAKE_NO_HANDLER, `invalid method \"${method}\"`);\n }\n\n try {\n return await matchMaker[method](roomName, clientOptions, authOptions);\n\n } catch (e) {\n throw new ServerError(e.code || ErrorCode.MATCHMAKE_UNHANDLED, e.message);\n }\n }\n\n}\n\n"],
|
|
5
|
+
"mappings": ";AAMA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,YAAY,gBAAgB;AAE5B,IAAO,qBAAQ;AAAA,EACb,sBAAsB;AAAA,IACpB,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,0BAA0B;AAAA;AAAA,EAE5B;AAAA,EAEA,gBAAgB,CAAC,gBAAgB,UAAU,QAAQ,YAAY,WAAW;AAAA,EAC1E,sBAAsB;AAAA,EACtB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBhB,eAAe,KAAoD;AACjE,UAAM,SAAU,IAAI,WAAW,IAAI,QAAQ,QAAQ,KAAO,IAAY,aAAc,IAAY,UAAU,QAAQ;AAClH,WAAO;AAAA,MACL,CAAC,6BAA6B,GAAG,UAAU;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkB;AAIlC,UAAM,aAAkB;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AACA,QAAI,UAAU;AACZ,iBAAW,MAAM,IAAI;AAAA,IACvB;AACA,WAAkB,iBAAM,UAAU;AAAA,EACpC;AAAA,EAEA,MAAM,aACJ,QACA,UACA,gBAA0C,CAAC,GAC3C,aACA;AACA,QAAI,KAAK,eAAe,QAAQ,MAAM,MAAM,IAAI;AAC9C,YAAM,IAAI,YAAY,UAAU,sBAAsB,mBAAmB,MAAM,GAAG;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,MAAM,WAAW,MAAM,EAAE,UAAU,eAAe,WAAW;AAAA,IAEtE,SAAS,GAAG;AACV,YAAM,IAAI,YAAY,EAAE,QAAQ,UAAU,qBAAqB,EAAE,OAAO;AAAA,IAC1E;AAAA,EACF;AAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/matchmaker/driver/api.ts"],
|
|
4
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;",
|
|
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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IRoomCache, SortOptions, RoomCache, MatchMakerDriver } from
|
|
1
|
+
import { IRoomCache, SortOptions, RoomCache, MatchMakerDriver } from '../api.js';
|
|
2
2
|
export type { IRoomCache, SortOptions, RoomCache, MatchMakerDriver };
|
|
3
|
-
import { RoomData } from './RoomData';
|
|
3
|
+
import { RoomData } from './RoomData.js';
|
|
4
4
|
export declare class LocalDriver implements MatchMakerDriver {
|
|
5
5
|
rooms: IRoomCache[];
|
|
6
6
|
createInstance(initialValues?: any): RoomData;
|
|
@@ -20,9 +20,9 @@ __export(LocalDriver_exports, {
|
|
|
20
20
|
LocalDriver: () => LocalDriver
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(LocalDriver_exports);
|
|
23
|
-
var import_Logger = require("../../../Logger");
|
|
24
|
-
var import_Query = require("./Query");
|
|
25
|
-
var import_RoomData = require("./RoomData");
|
|
23
|
+
var import_Logger = require("../../../Logger.js");
|
|
24
|
+
var import_Query = require("./Query.js");
|
|
25
|
+
var import_RoomData = require("./RoomData.js");
|
|
26
26
|
class LocalDriver {
|
|
27
27
|
constructor() {
|
|
28
28
|
this.rooms = [];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
|
|
4
|
-
"sourcesContent": ["import { logger } from
|
|
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
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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
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 {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.rooms = [];
|
|
7
8
|
}
|
|
@@ -36,7 +37,7 @@ class LocalDriver {
|
|
|
36
37
|
}
|
|
37
38
|
shutdown() {
|
|
38
39
|
}
|
|
39
|
-
}
|
|
40
|
+
};
|
|
40
41
|
export {
|
|
41
42
|
LocalDriver
|
|
42
43
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
|
|
4
|
-
"sourcesContent": ["import { logger } from
|
|
5
|
-
"mappings": "AAAA,SAAS,cAAc;AAMvB,SAAS,aAAa;AACtB,SAAS,gBAAgB;AAElB,
|
|
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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
|
|
4
|
-
"sourcesContent": ["import { SortOptions } from '../api';\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"],
|
|
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
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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// packages/core/src/matchmaker/driver/local/Query.ts
|
|
2
|
+
var Query = class {
|
|
2
3
|
constructor(rooms, conditions) {
|
|
3
4
|
this.$rooms = rooms.slice(0);
|
|
4
5
|
this.conditions = conditions;
|
|
@@ -49,7 +50,7 @@ class Query {
|
|
|
49
50
|
});
|
|
50
51
|
return resolve(result);
|
|
51
52
|
}
|
|
52
|
-
}
|
|
53
|
+
};
|
|
53
54
|
export {
|
|
54
55
|
Query
|
|
55
56
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
|
|
4
|
-
"sourcesContent": ["import { SortOptions } from '../api';\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,
|
|
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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -20,7 +20,7 @@ __export(RoomData_exports, {
|
|
|
20
20
|
RoomData: () => RoomData
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(RoomData_exports);
|
|
23
|
-
var import_Utils = require("../../../utils/Utils");
|
|
23
|
+
var import_Utils = require("../../../utils/Utils.js");
|
|
24
24
|
class RoomData {
|
|
25
25
|
constructor(initialValues, rooms) {
|
|
26
26
|
this.clients = 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/RoomData.ts"],
|
|
4
|
-
"sourcesContent": ["import { spliceOne } from '../../../utils/Utils';\nimport { RoomCache, IRoomCache } from '../api';\n\nexport class RoomData implements RoomCache {\n public clients: number = 0;\n public locked: boolean = false;\n public private: boolean = false;\n public maxClients: number = Infinity;\n public metadata: any;\n public name: string;\n public publicAddress: string;\n public processId: string;\n public roomId: string;\n public createdAt: Date;\n public unlisted: boolean = false;\n\n private $rooms: RoomCache[];\n\n constructor(initialValues: any, rooms: IRoomCache[]) {\n this.createdAt = new Date();\n\n for (const field in initialValues) {\n if (initialValues.hasOwnProperty(field)) {\n this[field] = initialValues[field];\n }\n }\n\n // make $rooms non-enumerable, so it can be serialized (circular references)\n Object.defineProperty(this, \"$rooms\", {\n value: rooms,\n enumerable: false,\n writable: true,\n });\n }\n\n public save() {\n if (this.$rooms.indexOf(this) === -1) {\n this.$rooms.push(this);\n }\n }\n\n public updateOne(operations: any) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n this[field] = operations.$set[field];\n }\n }\n }\n\n if (operations.$inc) {\n for (const field in operations.$inc) {\n if (operations.$inc.hasOwnProperty(field)) {\n this[field] += operations.$inc[field];\n }\n }\n }\n }\n\n public remove() {\n //\n // WORKAROUND: prevent calling `.remove()` multiple times\n // Seems to happen during disconnect + dispose: https://github.com/colyseus/colyseus/issues/390\n //\n if (!this.$rooms) { return; }\n\n const roomIndex = this.$rooms.indexOf(this);\n if (roomIndex === -1) { return; }\n\n spliceOne(this.$rooms, roomIndex);\n this.$rooms = null;\n }\n}\n"],
|
|
4
|
+
"sourcesContent": ["import { spliceOne } from '../../../utils/Utils.js';\nimport { RoomCache, IRoomCache } from '../api.js';\n\nexport class RoomData implements RoomCache {\n public clients: number = 0;\n public locked: boolean = false;\n public private: boolean = false;\n public maxClients: number = Infinity;\n public metadata: any;\n public name: string;\n public publicAddress: string;\n public processId: string;\n public roomId: string;\n public createdAt: Date;\n public unlisted: boolean = false;\n\n private $rooms: RoomCache[];\n\n constructor(initialValues: any, rooms: IRoomCache[]) {\n this.createdAt = new Date();\n\n for (const field in initialValues) {\n if (initialValues.hasOwnProperty(field)) {\n this[field] = initialValues[field];\n }\n }\n\n // make $rooms non-enumerable, so it can be serialized (circular references)\n Object.defineProperty(this, \"$rooms\", {\n value: rooms,\n enumerable: false,\n writable: true,\n });\n }\n\n public save() {\n if (this.$rooms.indexOf(this) === -1) {\n this.$rooms.push(this);\n }\n }\n\n public updateOne(operations: any) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n this[field] = operations.$set[field];\n }\n }\n }\n\n if (operations.$inc) {\n for (const field in operations.$inc) {\n if (operations.$inc.hasOwnProperty(field)) {\n this[field] += operations.$inc[field];\n }\n }\n }\n }\n\n public remove() {\n //\n // WORKAROUND: prevent calling `.remove()` multiple times\n // Seems to happen during disconnect + dispose: https://github.com/colyseus/colyseus/issues/390\n //\n if (!this.$rooms) { return; }\n\n const roomIndex = this.$rooms.indexOf(this);\n if (roomIndex === -1) { return; }\n\n spliceOne(this.$rooms, roomIndex);\n this.$rooms = null;\n }\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAGnB,MAAM,SAA8B;AAAA,EAezC,YAAY,eAAoB,OAAqB;AAdrD,SAAO,UAAkB;AACzB,SAAO,SAAkB;AACzB,SAAO,UAAmB;AAC1B,SAAO,aAAqB;AAO5B,SAAO,WAAoB;AAKzB,SAAK,YAAY,oBAAI,KAAK;AAE1B,eAAW,SAAS,eAAe;AACjC,UAAI,cAAc,eAAe,KAAK,GAAG;AACvC,aAAK,KAAK,IAAI,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AAGA,WAAO,eAAe,MAAM,UAAU;AAAA,MACpC,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEO,OAAO;AACZ,QAAI,KAAK,OAAO,QAAQ,IAAI,MAAM,IAAI;AACpC,WAAK,OAAO,KAAK,IAAI;AAAA,IACvB;AAAA,EACF;AAAA,EAEO,UAAU,YAAiB;AAChC,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,SAAS;AAKd,QAAI,CAAC,KAAK,QAAQ;AAAE;AAAA,IAAQ;AAE5B,UAAM,YAAY,KAAK,OAAO,QAAQ,IAAI;AAC1C,QAAI,cAAc,IAAI;AAAE;AAAA,IAAQ;AAEhC,gCAAU,KAAK,QAAQ,SAAS;AAChC,SAAK,SAAS;AAAA,EAChB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// packages/core/src/matchmaker/driver/local/RoomData.ts
|
|
2
|
+
import { spliceOne } from "../../../utils/Utils.mjs";
|
|
3
|
+
var RoomData = class {
|
|
3
4
|
constructor(initialValues, rooms) {
|
|
4
5
|
this.clients = 0;
|
|
5
6
|
this.locked = false;
|
|
@@ -50,7 +51,7 @@ class RoomData {
|
|
|
50
51
|
spliceOne(this.$rooms, roomIndex);
|
|
51
52
|
this.$rooms = null;
|
|
52
53
|
}
|
|
53
|
-
}
|
|
54
|
+
};
|
|
54
55
|
export {
|
|
55
56
|
RoomData
|
|
56
57
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/matchmaker/driver/local/RoomData.ts"],
|
|
4
|
-
"sourcesContent": ["import { spliceOne } from '../../../utils/Utils';\nimport { RoomCache, IRoomCache } from '../api';\n\nexport class RoomData implements RoomCache {\n public clients: number = 0;\n public locked: boolean = false;\n public private: boolean = false;\n public maxClients: number = Infinity;\n public metadata: any;\n public name: string;\n public publicAddress: string;\n public processId: string;\n public roomId: string;\n public createdAt: Date;\n public unlisted: boolean = false;\n\n private $rooms: RoomCache[];\n\n constructor(initialValues: any, rooms: IRoomCache[]) {\n this.createdAt = new Date();\n\n for (const field in initialValues) {\n if (initialValues.hasOwnProperty(field)) {\n this[field] = initialValues[field];\n }\n }\n\n // make $rooms non-enumerable, so it can be serialized (circular references)\n Object.defineProperty(this, \"$rooms\", {\n value: rooms,\n enumerable: false,\n writable: true,\n });\n }\n\n public save() {\n if (this.$rooms.indexOf(this) === -1) {\n this.$rooms.push(this);\n }\n }\n\n public updateOne(operations: any) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n this[field] = operations.$set[field];\n }\n }\n }\n\n if (operations.$inc) {\n for (const field in operations.$inc) {\n if (operations.$inc.hasOwnProperty(field)) {\n this[field] += operations.$inc[field];\n }\n }\n }\n }\n\n public remove() {\n //\n // WORKAROUND: prevent calling `.remove()` multiple times\n // Seems to happen during disconnect + dispose: https://github.com/colyseus/colyseus/issues/390\n //\n if (!this.$rooms) { return; }\n\n const roomIndex = this.$rooms.indexOf(this);\n if (roomIndex === -1) { return; }\n\n spliceOne(this.$rooms, roomIndex);\n this.$rooms = null;\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,iBAAiB;AAGnB,
|
|
4
|
+
"sourcesContent": ["import { spliceOne } from '../../../utils/Utils.js';\nimport { RoomCache, IRoomCache } from '../api.js';\n\nexport class RoomData implements RoomCache {\n public clients: number = 0;\n public locked: boolean = false;\n public private: boolean = false;\n public maxClients: number = Infinity;\n public metadata: any;\n public name: string;\n public publicAddress: string;\n public processId: string;\n public roomId: string;\n public createdAt: Date;\n public unlisted: boolean = false;\n\n private $rooms: RoomCache[];\n\n constructor(initialValues: any, rooms: IRoomCache[]) {\n this.createdAt = new Date();\n\n for (const field in initialValues) {\n if (initialValues.hasOwnProperty(field)) {\n this[field] = initialValues[field];\n }\n }\n\n // make $rooms non-enumerable, so it can be serialized (circular references)\n Object.defineProperty(this, \"$rooms\", {\n value: rooms,\n enumerable: false,\n writable: true,\n });\n }\n\n public save() {\n if (this.$rooms.indexOf(this) === -1) {\n this.$rooms.push(this);\n }\n }\n\n public updateOne(operations: any) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n this[field] = operations.$set[field];\n }\n }\n }\n\n if (operations.$inc) {\n for (const field in operations.$inc) {\n if (operations.$inc.hasOwnProperty(field)) {\n this[field] += operations.$inc[field];\n }\n }\n }\n }\n\n public remove() {\n //\n // WORKAROUND: prevent calling `.remove()` multiple times\n // Seems to happen during disconnect + dispose: https://github.com/colyseus/colyseus/issues/390\n //\n if (!this.$rooms) { return; }\n\n const roomIndex = this.$rooms.indexOf(this);\n if (roomIndex === -1) { return; }\n\n spliceOne(this.$rooms, roomIndex);\n this.$rooms = null;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,iBAAiB;AAGnB,IAAM,WAAN,MAAoC;AAAA,EAezC,YAAY,eAAoB,OAAqB;AAdrD,SAAO,UAAkB;AACzB,SAAO,SAAkB;AACzB,SAAO,UAAmB;AAC1B,SAAO,aAAqB;AAO5B,SAAO,WAAoB;AAKzB,SAAK,YAAY,oBAAI,KAAK;AAE1B,eAAW,SAAS,eAAe;AACjC,UAAI,cAAc,eAAe,KAAK,GAAG;AACvC,aAAK,KAAK,IAAI,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AAGA,WAAO,eAAe,MAAM,UAAU;AAAA,MACpC,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEO,OAAO;AACZ,QAAI,KAAK,OAAO,QAAQ,IAAI,MAAM,IAAI;AACpC,WAAK,OAAO,KAAK,IAAI;AAAA,IACvB;AAAA,EACF;AAAA,EAEO,UAAU,YAAiB;AAChC,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,SAAS;AAKd,QAAI,CAAC,KAAK,QAAQ;AAAE;AAAA,IAAQ;AAE5B,UAAM,YAAY,KAAK,OAAO,QAAQ,IAAI;AAC1C,QAAI,cAAc,IAAI;AAAE;AAAA,IAAQ;AAEhC,cAAU,KAAK,QAAQ,SAAS;AAChC,SAAK,SAAS;AAAA,EAChB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -33,8 +33,8 @@ module.exports = __toCommonJS(LocalPresence_exports);
|
|
|
33
33
|
var import_fs = __toESM(require("fs"));
|
|
34
34
|
var import_path = __toESM(require("path"));
|
|
35
35
|
var import_events = require("events");
|
|
36
|
-
var import_Utils = require("../utils/Utils");
|
|
37
|
-
var import_DevMode = require("../utils/DevMode");
|
|
36
|
+
var import_Utils = require("../utils/Utils.js");
|
|
37
|
+
var import_DevMode = require("../utils/DevMode.js");
|
|
38
38
|
const DEVMODE_CACHE_FILE_PATH = import_path.default.resolve(".devmode.json");
|
|
39
39
|
class LocalPresence {
|
|
40
40
|
constructor() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/presence/LocalPresence.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\n\nimport { EventEmitter } from 'events';\nimport { spliceOne } from '../utils/Utils.js';\nimport { Presence } from './Presence.js';\n\nimport { isDevMode } from '../utils/DevMode.js';\n\ntype Callback = (...args: any[]) => void;\n\nconst DEVMODE_CACHE_FILE_PATH = path.resolve(\".devmode.json\");\n\nexport class LocalPresence implements Presence {\n public channels = new EventEmitter();\n\n public data: {[roomName: string]: string[]} = {};\n public hash: {[roomName: string]: {[key: string]: string}} = {};\n\n public keys: {[name: string]: string | number} = {};\n\n protected subscriptions: {[id: string]: Callback[]} = {};\n private timeouts: {[name: string]: NodeJS.Timeout} = {};\n\n constructor() {\n //\n // reload from local cache on devMode\n //\n if (\n isDevMode &&\n fs.existsSync(DEVMODE_CACHE_FILE_PATH)\n ) {\n const cache = fs.readFileSync(DEVMODE_CACHE_FILE_PATH).toString('utf-8') || \"{}\";\n const parsed = JSON.parse(cache);\n if (parsed.data) { this.data = parsed.data; }\n if (parsed.hash) { this.hash = parsed.hash; }\n if (parsed.keys) { this.keys = parsed.keys; }\n }\n }\n\n public subscribe(topic: string, callback: (...args: any[]) => void) {\n if (!this.subscriptions[topic]) { this.subscriptions[topic] = []; }\n this.subscriptions[topic].push(callback);\n this.channels.on(topic, callback);\n return this;\n }\n\n public unsubscribe(topic: string, callback?: Callback) {\n const topicCallbacks = this.subscriptions[topic];\n if (!topicCallbacks) { return; }\n\n if (callback) {\n const idx = topicCallbacks.indexOf(callback);\n if (idx !== -1) {\n topicCallbacks.splice(idx, 1);\n this.channels.removeListener(topic, callback);\n }\n\n if (topicCallbacks.length === 0) {\n delete this.subscriptions[topic];\n }\n\n } else {\n topicCallbacks.forEach((cb) =>\n this.channels.removeListener(topic, cb));\n\n delete this.subscriptions[topic];\n }\n\n return this;\n }\n\n public publish(topic: string, data: any) {\n this.channels.emit(topic, data);\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n return this.channels.listenerCount(key) > 0;\n }\n\n public set(key: string, value: string) {\n this.keys[key] = value;\n }\n\n public setex(key: string, value: string, seconds: number) {\n this.keys[key] = value;\n this.expire(key, seconds);\n }\n\n public expire(key: string, seconds: number) {\n // ensure previous timeout is clear before setting another one.\n if (this.timeouts[key]) {\n clearTimeout(this.timeouts[key]);\n }\n this.timeouts[key] = setTimeout(() => {\n delete this.keys[key];\n delete this.timeouts[key];\n }, seconds * 1000);\n }\n\n public get(key: string) {\n return this.keys[key];\n }\n\n public del(key: string) {\n delete this.keys[key];\n delete this.data[key];\n delete this.hash[key];\n }\n\n public sadd(key: string, value: any) {\n if (!this.data[key]) {\n this.data[key] = [];\n }\n\n if (this.data[key].indexOf(value) === -1) {\n this.data[key].push(value);\n }\n }\n\n public async smembers(key: string): Promise<string[]> {\n return this.data[key] || [];\n }\n\n public async sismember(key: string, field: string) {\n return this.data[key] && this.data[key].includes(field) ? 1 : 0;\n }\n\n public srem(key: string, value: any) {\n if (this.data[key]) {\n spliceOne(this.data[key], this.data[key].indexOf(value));\n }\n }\n\n public scard(key: string) {\n return (this.data[key] || []).length;\n }\n\n public async sinter(...keys: string[]) {\n const intersection: {[value: string]: number} = {};\n\n for (let i = 0, l = keys.length; i < l; i++) {\n (await this.smembers(keys[i])).forEach((member) => {\n if (!intersection[member]) {\n intersection[member] = 0;\n }\n\n intersection[member]++;\n });\n }\n\n return Object.keys(intersection).reduce((prev, curr) => {\n if (intersection[curr] > 1) {\n prev.push(curr);\n }\n return prev;\n }, []);\n }\n\n public hset(key: string, field: string, value: string) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n this.hash[key][field] = value;\n }\n\n public hincrby(key: string, field: string, incrBy: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n let value = Number(this.hash[key][field] || '0');\n value += incrBy;\n this.hash[key][field] = value.toString();\n return value;\n }\n\n public hincrbyex(key: string, field: string, incrBy: number, expireInSeconds: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n let value = Number(this.hash[key][field] || '0');\n value += incrBy;\n this.hash[key][field] = value.toString();\n this.setex(key, field, expireInSeconds);\n return value;\n }\n\n public async hget(key: string, field: string) {\n return this.hash[key] && this.hash[key][field];\n }\n\n public async hgetall(key: string) {\n return this.hash[key] || {};\n }\n\n public hdel(key: string, field: any) {\n const success = this.hash?.[key]?.[field] !== undefined;\n if (success) {\n delete this.hash[key][field];\n }\n return success;\n }\n\n public async hlen(key: string) {\n return this.hash[key] && Object.keys(this.hash[key]).length || 0;\n }\n\n public async incr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)++;\n return Promise.resolve(this.keys[key] as number);\n }\n\n public async decr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)--;\n return Promise.resolve(this.keys[key] as number);\n }\n\n public llen(key: string): number {\n return (this.data[key] && this.data[key].length) || 0;\n }\n\n public rpush(key: string, ...values: string[]): number {\n if (!this.data[key]) { this.data[key] = []; }\n\n let lastLength: number = 0;\n\n values.forEach(value => {\n lastLength = this.data[key].push(value);\n });\n\n return lastLength;\n }\n\n public lpush(key: string, ...values: string[]): number {\n if (!this.data[key]) { this.data[key] = []; }\n\n let lastLength: number = 0;\n\n values.forEach(value => {\n lastLength = this.data[key].unshift(value);\n });\n\n return lastLength;\n }\n\n\n public lpop(key: string): string {\n return Array.isArray(this.data[key]) && this.data[key].shift();\n }\n\n public rpop(key: string): string {\n return this.data[key].pop();\n }\n\n public brpop(...args: [...keys: string[], timeoutInSeconds: number]): Promise<[string, string] | null> {\n const keys = args.slice(0, -2) as string[];\n const timeoutInSeconds = args[args.length - 1] as number;\n\n const getFirstPopulated = (): [string, string] | null => {\n const keyWithValue = keys.find(key => this.data[key] && this.data[key].length > 0);\n if (keyWithValue) {\n return [keyWithValue, this.data[keyWithValue].pop()];\n } else {\n return null;\n }\n }\n\n const firstPopulated = getFirstPopulated();\n\n if (firstPopulated) {\n // return first populated key + item\n return Promise.resolve(firstPopulated);\n\n } else {\n // 8 retries per second\n const maxRetries = timeoutInSeconds * 8;\n\n let tries = 0;\n return new Promise((resolve) => {\n const interval = setInterval(() => {\n tries++;\n\n const firstPopulated = getFirstPopulated();\n if (firstPopulated) {\n clearInterval(interval);\n return resolve(firstPopulated);\n\n } else if (tries >= maxRetries) {\n clearInterval(interval);\n return resolve(undefined);\n }\n\n }, (timeoutInSeconds * 1000) / maxRetries);\n });\n }\n }\n\n public shutdown() {\n if (isDevMode) {\n const cache = JSON.stringify({\n data: this.data,\n hash: this.hash,\n keys: this.keys\n });\n fs.writeFileSync(DEVMODE_CACHE_FILE_PATH, cache, { encoding: \"utf-8\" });\n }\n }\n\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["path", "fs", "firstPopulated"]
|
|
7
7
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
// packages/core/src/presence/LocalPresence.ts
|
|
1
2
|
import fs from "fs";
|
|
2
3
|
import path from "path";
|
|
3
4
|
import { EventEmitter } from "events";
|
|
4
|
-
import { spliceOne } from "../utils/Utils";
|
|
5
|
-
import { isDevMode } from "../utils/DevMode";
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { spliceOne } from "../utils/Utils.mjs";
|
|
6
|
+
import { isDevMode } from "../utils/DevMode.mjs";
|
|
7
|
+
var DEVMODE_CACHE_FILE_PATH = path.resolve(".devmode.json");
|
|
8
|
+
var LocalPresence = class {
|
|
8
9
|
constructor() {
|
|
9
10
|
this.channels = new EventEmitter();
|
|
10
11
|
this.data = {};
|
|
@@ -250,7 +251,7 @@ class LocalPresence {
|
|
|
250
251
|
fs.writeFileSync(DEVMODE_CACHE_FILE_PATH, cache, { encoding: "utf-8" });
|
|
251
252
|
}
|
|
252
253
|
}
|
|
253
|
-
}
|
|
254
|
+
};
|
|
254
255
|
export {
|
|
255
256
|
LocalPresence
|
|
256
257
|
};
|