@colyseus/core
Version:
Multiplayer Framework for Node.js.
39 lines (38 loc) • 1.18 kB
JavaScript
// 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
};