Hydration через snapshots

Совместный рисунок: Alice ↔ Bob

Shared actor canvas

Две canvas доски

boards: 2

Alice

origin: aliceactors: 0
synced

Bob

origin: bobactors: 0
synced

Transport packet

Симулированная сеть

{
  "waiting": "draw on Alice or Bob"
}

Что смотреть

Snapshot transport

В snapshot нет canvas bitmap. Передаётся только machines.canvasStroke: record actor ids и compact payload каждого штриха.

merge делает доску совместной: локальные акторы не стираются, чужие добавляются или обновляются network-автоматом через MachineManager.hydrate.

generateActorId собирает actor id из originId и strokeId, поэтому новая доска может подключиться к общему snapshot без пересечения локальных штрихов.

Тот же packet можно отправить через BroadcastChannel, WebRTC, QR или backend.