32 lines · 763 B
import type { RoomControl } from "~/lib/editor-protocol";

export function sendControl(socket: WebSocket, message: RoomControl): void {
  try {
    socket.send(JSON.stringify(message));
  } catch {
    socket.close();
  }
}

export function broadcastControl(sockets: WebSocket[], message: RoomControl): void {
  const payload = JSON.stringify(message);
  for (const socket of sockets) {
    try {
      socket.send(payload);
    } catch {
      continue;
    }
  }
}

export function broadcastFrame(sockets: WebSocket[], frame: Uint8Array, except: WebSocket | null): void {
  for (const socket of sockets) {
    if (socket === except || socket.readyState !== WebSocket.OPEN) continue;
    try {
      socket.send(frame);
    } catch {
      continue;
    }
  }
}