UNPKG

@colyseus/mongoose-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) 5.44 kB
{ "version": 3, "sources": ["../src/index.ts"], "sourcesContent": ["import { type IRoomCache, type MatchMakerDriver, type SortOptions, debugDriver } from '@colyseus/core';\nimport mongoose, { Document, Schema } from 'mongoose';\n\nconst RoomCacheSchema: Schema = new Schema({\n clients: { type: Number, default: 0 },\n locked: { type: Boolean, default: false },\n maxClients: { type: Number, default: Infinity },\n metadata: Schema.Types.Mixed,\n name: String,\n private: { type: Boolean, default: false },\n publicAddress: String,\n processId: String,\n roomId: String,\n unlisted: { type: Boolean, default: false }, // used for default LobbyRoom (prevent from showing up on room listing)\n}, {\n strict: false,\n timestamps: true,\n versionKey: false,\n});\n\nRoomCacheSchema.index({ name: 1, locked: -1 });\nRoomCacheSchema.index({ roomId: 1 });\n\nconst RoomCache = mongoose.model<Document>('RoomCache', RoomCacheSchema);\n\nexport class MongooseDriver implements MatchMakerDriver {\n\n constructor(connectionURI?: string) {\n\n if (mongoose.connection.readyState === mongoose.STATES.disconnected) {\n connectionURI = connectionURI || process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/colyseus';\n\n mongoose.connect(connectionURI, {\n autoIndex: true,\n autoCreate: true,\n });\n\n debugDriver(\"\uD83D\uDDC4\uFE0F Connected to\", connectionURI);\n }\n }\n\n public createInstance(initialValues: any = {}) {\n return (new RoomCache(initialValues) as any);\n }\n\n public async has(roomId: string) {\n return !!(await RoomCache.findOne({ roomId }));\n };\n\n public query(conditions: Partial<IRoomCache>, sortOptions: SortOptions = {}) {\n let query = RoomCache.find(conditions, {\n _id: false,\n clients: true,\n createdAt: true,\n locked: true,\n maxClients: true,\n metadata: true,\n name: true,\n roomId: true,\n });\n\n if (sortOptions) {\n query = query.sort(sortOptions);\n }\n\n return query as any as IRoomCache[];\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n let query = RoomCache.findOne(conditions, { _id: 0 });\n\n if (sortOptions) {\n query = query.sort(sortOptions);\n }\n\n return query as any as Promise<IRoomCache>;\n }\n\n public async clear() {\n await RoomCache.deleteMany({});\n }\n\n public async cleanup(processId: string) {\n await RoomCache.deleteMany({ processId });\n }\n\n public async remove(roomId: string) {\n const result = await RoomCache.deleteOne({ roomId });\n return result.deletedCount > 0;\n }\n\n public async update(\n room: IRoomCache,\n operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>\n ) {\n const result = await RoomCache.updateOne({ roomId: room.roomId }, operations);\n return result.modifiedCount > 0;\n }\n\n public async persist(room: IRoomCache, create: boolean = false) {\n if (create) {\n await RoomCache.create(room);\n return true;\n }\n const result = await RoomCache.updateOne({ roomId: room.roomId }, { $set: room });\n return result.modifiedCount > 0 || result.matchedCount > 0;\n }\n\n public async shutdown() {\n await mongoose.disconnect();\n }\n}\n"], "mappings": "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", "names": ["mongoose"] }