UNPKG

@colyseus/redis-driver

Version:

<div align="center"> <a href="https://github.com/colyseus/colyseus"> <img src="media/logo.svg?raw=true" width="60%" height="300" /> </a> <br> <br> <a href="https://npmjs.com/package/colyseus"> <img src="https://img.shields.io/npm/dm/coly

8 lines (7 loc) 4.24 kB
{ "version": 3, "sources": ["../src/RoomData.ts"], "sourcesContent": ["import { RoomCache, logger } from '@colyseus/core';\nimport Redis, { Cluster } from 'ioredis';\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 #client: Redis | Cluster;\n #removed: boolean = false;\n\n constructor(\n initialValues: any,\n client: Redis | Cluster\n ) {\n this.#client = client;\n\n this.createdAt = (initialValues && initialValues.createdAt)\n ? new Date(initialValues.createdAt)\n : new Date();\n\n for (const field in initialValues) {\n if (initialValues.hasOwnProperty(field)) {\n this[field] = initialValues[field];\n }\n }\n }\n\n public toJSON() {\n return {\n clients: this.clients,\n createdAt: this.createdAt,\n maxClients: this.maxClients,\n metadata: this.metadata,\n name: this.name,\n publicAddress: this.publicAddress,\n processId: this.processId,\n roomId: this.roomId,\n };\n }\n\n public async save() {\n // skip if already removed.\n if (this.#removed) { return; }\n\n if (this.roomId) {\n // FIXME: workaround so JSON.stringify() stringifies all dynamic fields.\n const toJSON = this.toJSON;\n this.toJSON = undefined;\n\n const roomcache = JSON.stringify(this);\n this.toJSON = toJSON;\n\n await this.hset('roomcaches', this.roomId, roomcache);\n\n } else {\n logger.warn(\"RedisDriver: can't .save() without a `roomId`\")\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 return this.save();\n }\n\n public remove() {\n if (this.roomId) {\n this.#removed = true;\n return this.hdel('roomcaches', this.roomId);\n }\n }\n\n private async hset(key: string, field: string, value: string) {\n return await this.#client.hset(key, field, value);\n }\n\n private async hdel(key: string, field: string) {\n return await this.#client.hdel(key, field);\n }\n}\n"], "mappings": ";AAAA,SAAoB,cAAc;AAG3B,IAAM,WAAN,MAAoC;AAAA,EAgBzC,YACE,eACA,QACA;AAlBF,SAAO,UAAkB;AACzB,SAAO,SAAkB;AACzB,SAAO,UAAmB;AAC1B,SAAO,aAAqB;AAO5B,SAAO,WAAoB;AAG3B,oBAAoB;AAMlB,SAAK,UAAU;AAEf,SAAK,YAAa,iBAAiB,cAAc,YAC7C,IAAI,KAAK,cAAc,SAAS,IAChC,oBAAI,KAAK;AAEb,eAAW,SAAS,eAAe;AACjC,UAAI,cAAc,eAAe,KAAK,GAAG;AACvC,aAAK,KAAK,IAAI,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAlBA;AAAA,EACA;AAAA,EAmBO,SAAS;AACd,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAa,OAAO;AAElB,QAAI,KAAK,UAAU;AAAE;AAAA,IAAQ;AAE7B,QAAI,KAAK,QAAQ;AAEf,YAAM,SAAS,KAAK;AACpB,WAAK,SAAS;AAEd,YAAM,YAAY,KAAK,UAAU,IAAI;AACrC,WAAK,SAAS;AAEd,YAAM,KAAK,KAAK,cAAc,KAAK,QAAQ,SAAS;AAAA,IAEtD,OAAO;AACL,aAAO,KAAK,+CAA+C;AAAA,IAC7D;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;AAEA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEO,SAAS;AACd,QAAI,KAAK,QAAQ;AACf,WAAK,WAAW;AAChB,aAAO,KAAK,KAAK,cAAc,KAAK,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAc,KAAK,KAAa,OAAe,OAAe;AAC5D,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,OAAO,KAAK;AAAA,EAClD;AAAA,EAEA,MAAc,KAAK,KAAa,OAAe;AAC7C,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,EAC3C;AACF;", "names": [] }