@eweser/db
Version:
eweser-db core database
41 lines (39 loc) • 1.36 kB
text/typescript
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);
};