@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
77 lines (76 loc) • 2.14 kB
JavaScript
// 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 shutdown() {
await mongoose.disconnect();
}
};
export {
MongooseDriver
};