UNPKG

@colyseus/core

Version:

Multiplayer Framework for Node.js.

39 lines (38 loc) 1.18 kB
// packages/core/src/matchmaker/Lobby.ts import * as matchMaker from "../MatchMaker.mjs"; var LOBBY_CHANNEL = "$lobby"; function updateLobby(room, removed = false) { const listing = room["_listing"]; if (listing.unlisted || !listing.roomId) { return; } if (removed) { matchMaker.presence.publish(LOBBY_CHANNEL, `${listing.roomId},1`); } else if (!listing.private) { matchMaker.presence.publish(LOBBY_CHANNEL, `${listing.roomId},0`); } } async function subscribeLobby(callback) { const removedRoomIds = /* @__PURE__ */ new Set(); const cb = async (message) => { const [roomId, isRemove] = message.split(","); if (isRemove === "1") { removedRoomIds.add(roomId); callback(roomId, null); setTimeout(() => removedRoomIds.delete(roomId), 2e3); } else { removedRoomIds.delete(roomId); const room = (await matchMaker.query({ roomId }))[0]; if (removedRoomIds.has(roomId)) { return; } callback(roomId, room); } }; await matchMaker.presence.subscribe(LOBBY_CHANNEL, cb); return () => matchMaker.presence.unsubscribe(LOBBY_CHANNEL, cb); } export { subscribeLobby, updateLobby };