@colyseus/core
Version:
Multiplayer Framework for Node.js.
72 lines (71 loc) • 1.81 kB
JavaScript
// packages/core/src/matchmaker/LocalDriver/LocalDriver.ts
import { debugMatchMaking } from "../../Debug.mjs";
import { Query } from "./Query.mjs";
var LocalDriver = class {
constructor() {
this.rooms = [];
}
has(roomId) {
return this.rooms.some((room) => room.roomId === roomId);
}
query(conditions, sortOptions) {
const query = new Query(this.rooms, conditions);
if (sortOptions) {
query.sort(sortOptions);
}
return query.filter(conditions);
}
cleanup(processId) {
const cachedRooms = this.query({ processId });
debugMatchMaking("removing stale rooms by processId %s (%s rooms found)", processId, cachedRooms.length);
cachedRooms.forEach((room) => this.remove(room.roomId));
return Promise.resolve();
}
findOne(conditions, sortOptions) {
const query = new Query(this.rooms, conditions);
if (sortOptions) {
query.sort(sortOptions);
}
return query;
}
update(room, operations) {
if (operations.$set) {
for (const field in operations.$set) {
if (operations.$set.hasOwnProperty(field)) {
room[field] = operations.$set[field];
}
}
}
if (operations.$inc) {
for (const field in operations.$inc) {
if (operations.$inc.hasOwnProperty(field)) {
room[field] += operations.$inc[field];
}
}
}
return true;
}
persist(room, create = false) {
if (!create) {
return false;
}
this.rooms.push(room);
return true;
}
remove(roomId) {
const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);
if (roomIndex !== -1) {
this.rooms.splice(roomIndex, 1);
return true;
}
return false;
}
clear() {
this.rooms = [];
}
shutdown() {
}
};
export {
LocalDriver
};