1. server send a 'save-request' to the client. client acknowledges sending back a status of the save (as before). 2. the client is not broadcasting SAVED anymore 3. the server send a broadcast message to all in room with event 'saved' 4. the client handles the 'saved' event and refetches 5. socket idle state is moved to a separate event 'idle-state' (the payload and handlers stay the same) 7. on the client, handling of idle state is moved from client-broadcast to its own event --- 9. when server detects idleness, it has to transfer them to read-only. The server send a event 'mode' to the concerned socket that the mode changed. The client handles it by updating the mode of Excalidraw and displaying a dialog/message. 10. this unlocks the possibility to listen on 'server-broadcast' and 'server-volatile-broadcast' about last activity. 11. When the socket is requesting to join a room, the server sends the computed mode of the client through the 'mode' event. 12. Server removes the `server-broadcast` listener on the socket and sets the `update` flag to `false`. 13. Remove `server-request-broadcast` event and its listener 14. whiteboard service uses an event emitter to notify about whiteboard updates