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âmetro | Descrição |
|---|---|
| roomId | ID ou short_code da sala |
| output | Tipo: viewer, operator, agenda, moderator, controller |
| name | Nome 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.