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

93 lines (92 loc) 2.69 kB
// packages/drivers/mongoose-driver/src/index.ts import { debugDriver } from "@colyseus/core"; import mongoose, { Schema } from "mongoose"; var RoomCacheSchema = new Schema({ clients: { type: Number, default: 0 }, locked: { type: Boolean, default: false }, maxClients: { type: Number, default: Infinity }, metadata: Schema.Types.Mixed, name: String, private: { type: Boolean, default: false }, publicAddress: String, processId: String, roomId: String, unlisted: { type: Boolean, default: false } // used for default LobbyRoom (prevent from showing up on room listing) }, { strict: false, timestamps: true, versionKey: false }); RoomCacheSchema.index({ name: 1, locked: -1 }); RoomCacheSchema.index({ roomId: 1 }); var RoomCache = mongoose.model("RoomCache", RoomCacheSchema); var MongooseDriver = class { constructor(connectionURI) { if (mongoose.connection.readyState === mongoose.STATES.disconnected) { connectionURI = connectionURI || process.env.MONGO_URI || "mongodb://127.0.0.1:27017/colyseus"; mongoose.connect(connectionURI, { autoIndex: true, autoCreate: true }); debugDriver("\u{1F5C4}\uFE0F Connected to", connectionURI); } } createInstance(initialValues = {}) { return new RoomCache(initialValues); } async has(roomId) { return !!await RoomCache.findOne({ roomId }); } query(conditions, sortOptions = {}) { let query = RoomCache.find(conditions, { _id: false, clients: true, createdAt: true, locked: true, maxClients: true, metadata: true, name: true, roomId: true }); if (sortOptions) { query = query.sort(sortOptions); } return query; } findOne(conditions, sortOptions) { let query = RoomCache.findOne(conditions, { _id: 0 }); if (sortOptions) { query = query.sort(sortOptions); } return query; } async clear() { await RoomCache.deleteMany({}); } async cleanup(processId) { await RoomCache.deleteMany({ processId }); } async remove(roomId) { const result = await RoomCache.deleteOne({ roomId }); return result.deletedCount > 0; } async update(room, operations) { const result = await RoomCache.updateOne({ roomId: room.roomId }, operations); return result.modifiedCount > 0; } async persist(room, create = false) { if (create) { await RoomCache.create(room); return true; } const result = await RoomCache.updateOne({ roomId: room.roomId }, { $set: room }); return result.modifiedCount > 0 || result.matchedCount > 0; } async shutdown() { await mongoose.disconnect(); } }; export { MongooseDriver };