UNPKG

@colyseus/core

Version:

Multiplayer Framework for Node.js.

72 lines (71 loc) 1.81 kB
// 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 };