WebSocket

Comunicação em tempo real com o PalcoTimer via WebSocket.

Introdução

O PalcoTimer usa WebSocket para sincronização em tempo real entre todos os dispositivos conectados. Qualquer alteração (play, pause, mudança de timer, mensagem) é propagada instantaneamente.

Conectando

Conecte ao WebSocket usando a URL:

wss://app.palcotimer.com/ws/{roomId}?output={tipo}&name={nome}
ParâmetroDescrição
roomIdID ou short_code da sala
outputTipo: viewer, operator, agenda, moderator, controller
nameNome do dispositivo (opcional)

Mensagens Cliente → Servidor

Solicitar estado

{
  "type": "request_state"
}

Ping (manter conexão)

{
  "type": "ping"
}

Controles de playback

// Play
{ "type": "control", "action": "play" }

// Pause
{ "type": "control", "action": "pause" }

// Stop
{ "type": "control", "action": "stop" }

// Reset
{ "type": "control", "action": "reset" }

// Próximo timer
{ "type": "control", "action": "next" }

// Timer anterior
{ "type": "control", "action": "previous" }

// Ir para timer específico
{ "type": "control", "action": "go_to", "timer_id": "uuid" }

// Adicionar tempo (ms)
{ "type": "control", "action": "add_time", "value": 60000 }

// Definir tempo (ms)
{ "type": "control", "action": "set_time", "value": 300000 }

Modos de exibição

// Ativar/desativar blackout
{ "type": "control", "action": "blackout" }
{ "type": "control", "action": "stop_blackout" }

// Ativar/desativar flash
{ "type": "control", "action": "flash" }
{ "type": "control", "action": "stop_flash" }

// Ativar/desativar focus (apenas mensagem)
{ "type": "control", "action": "focus" }
{ "type": "control", "action": "stop_focus" }

Mensagens

// Mostrar mensagem
{ "type": "control", "action": "show_message", "timer_id": "message_uuid" }

// Esconder mensagem
{ "type": "control", "action": "hide_message" }

Mensagens Servidor → Cliente

Estado da sala

{
  "type": "room",
  "room": { "id": "...", "name": "...", ... },
  "timers": [ ... ],
  "messages": [ ... ],
  "playback": {
    "state": "running",
    "current_timer_id": "uuid",
    "elapsed_ms": 60000,
    "blackout": false,
    "flash": false,
    "focus": false
  },
  "server_time": 1704067200000
}

Status de playback

{
  "type": "playback_status",
  "state": "running",
  "timer_id": "uuid",
  "elapsed_ms": 65000,
  "duration_ms": 300000,
  "server_time": 1704067200000,
  "blackout": false,
  "flash": false,
  "focus": false
}

Atualização de timer

{
  "type": "timer_update",
  "timer": {
    "action": "update",
    "timer": { ... }
  }
}

Pong

{
  "type": "pong",
  "server_time": 1704067200000
}

Exemplo Completo

// JavaScript - Conectar e controlar
const ws = new WebSocket('wss://app.palcotimer.com/ws/ABC123?output=controller');

ws.onopen = () => {
  console.log('Conectado!');
  // Solicitar estado inicial
  ws.send(JSON.stringify({ type: 'request_state' }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);

  switch (data.type) {
    case 'room':
      console.log('Estado da sala:', data);
      break;
    case 'playback_status':
      console.log('Playback:', data.state, data.elapsed_ms);
      break;
  }
};

// Controlar
function play() {
  ws.send(JSON.stringify({ type: 'control', action: 'play' }));
}

function pause() {
  ws.send(JSON.stringify({ type: 'control', action: 'pause' }));
}
O servidor envia um ping a cada 30 segundos. Responda com pong para manter a conexão ativa.