UNPKG

@eweser/db

Version:
41 lines (39 loc) 1.36 kB
import type { Registry } from '../../types.js'; import type { Database } from '../../index.js'; import { wait } from '@eweser/shared'; /** in order not to overwhelm the requests for remote server collect, loading the server connections will be staggered with a default 1 second gap * By default will not load remotes */ export const loadRooms = (db: Database) => async (rooms: Registry, loadRemotes = false, staggerMs = 1000) => { const loadedRooms = []; db.debug('loading rooms', rooms); for (const room of rooms) { const loadedRoom = await db.loadRoom(room, { loadRemote: false }); loadedRooms.push(loadedRoom); } db.debug('loaded rooms', loadedRooms); db.emit('roomsLoaded', loadedRooms); if (!loadRemotes) { return; } const remoteLoadedRooms = []; let isFirstRoom = true; for (const room of rooms) { if (!isFirstRoom) { await wait(staggerMs); } else { isFirstRoom = false; } const remoteLoadedRoom = await db.loadRoom(room, { loadRemote: true, awaitLoadRemote: true, }); if (remoteLoadedRoom.syncProvider?.status === 'connected') { remoteLoadedRooms.push(remoteLoadedRoom); } } db.debug('loaded remotes for rooms', remoteLoadedRooms); db.emit('roomsRemotesLoaded', remoteLoadedRooms); };