Handle Deleted Rooms

Overview & Context

The roomserver will get a DELETE /v1/rooms/{room_id} endpoint. When a room is deleted (because the underlying meeting/room was removed from the database), the roomserver closes the running room and sends the existing core Closing signaling message with a new reason room_deleted to every connected client.

The web app must react to this reason by:

  1. Showing a non-closable overlay informing the user that the meeting was deleted (the user cannot return — the room no longer exists).
  2. Preventing the reconnection flow (both the signaling reconnection loop and the LiveKit media reconnection) from kicking in, so the user is not stuck in a reconnection dialog for a room that is gone.

Most of the supporting state already exists: room.isDeleted, the setIsRoomDeleted action, the selectIsRoomDeleted selector, the MeetingEndedDialog shown when isRoomDeleted === true and the LiveKit reconnect suppression guarded by state.room.isDeleted

Technical Design & Interfaces

New close reason (incoming type)

export enum RoomCloseReason {
  GracefulShutdown = 'graceful_shutdown',
  ImmediateShutdown = 'immediate_shutdown',
  FatalError = 'fatal_error',
  TimeLimitReached = 'time_limit_reached',
  IdleTimeoutReached = 'idle_timeout_reached',
  RoomDeleted = 'room_deleted', // NEW 
}

Handle the core closing message

case RoomserverMessageKey.Closing: {
  if (data.reason === RoomCloseReason.RoomDeleted) {
    dispatch(setIsRoomDeleted(true));
  }
  break;
}

Suppress reconnection

  • LiveKit media reconnect should already be guarded
  • Signaling reconnect is not guarded - adding a n early-return when state.room.isDeleted === true so the websocket does not try to reconnect to a deleted room should solve it

Non-closable overlay

Extend the MeetingEndedDialog by making the X icon and the secondary close button optional, so that the dialog is not dismissible.

Frontend & UI Requirements

Translations

TBD

Definition of Done (DoD)

  • On receiving the core closing message with reason: "room_deleted", the user sees a non-closable overlay and cannot rejoin.
  • Neither the signaling reconnection dialog nor the LiveKit media reconnection dialog appears for a deleted room
  • Unit tests added (core closing handler, reconnect-suppression listeners, non-closable overlay rendering)
Edited by Henning Mueller