Loading Storage
Listen to when a room is deleted so that when the same room is re-created, users can resume from the same storage as where they left off.
Add listeners
1// server/io.ts23import { yjs } from "@pluv/crdt-yjs";4import { createIO } from "@pluv/io";5import { platformNode } from "@pluv/platform-node";6import { db } from "./db";78export const io = createIO({9 // Specify which CRDT to use here10 crdt: yjs,11 // Load storage for a newly created room.12 getInitialStorage: async ({ room }) => {13 const existingRoom = await db.room.findUnique({ where: { room } });1415 return existingRoom?.encodedState ?? null;16 },17 platform: platformNode(),18 // Before the room is destroyed, persist the state to a database19 // to load when the room is re-created.20 onRoomDeleted: async ({ encodedState, room }) => {21 await db.room.upsert({22 where: { room },23 create: { encodedState, room },24 update: { encodedState },25 });26 },27 // It is unnecessary to save the storage state in this listener.28 // If a room already exists, users will load the currently active29 // storage before the storage from initialStorage.30 onStorageUpdated: ({ encodedState, room }) => {31 console.log(room, encodedState);32 },33});