@colyseus/core
Version:
Multiplayer Framework for Node.js.
8 lines (7 loc) • 3.69 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/matchmaker/RegisteredHandler.ts"],
"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"],
"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;",
"names": []
}