Skip to main content
Você está vendo a documentação para desenvolvedores
Esta documentação é para desenvolvedores que trabalham com a plataforma para desenvolvedores Base44.
Use estes fluxos de exemplo como ponto de partida para sua implementação.

Conectar um cliente a uma sessão

Quando o frontend precisa entrar em uma sessão ao vivo, receber mensagens do actor e enviar mensagens para o actor, conecte um cliente a uma sessão de actor. Para conectar um cliente a uma sessão:
  1. Chame base44.actors.ActorName(sessionId) para selecionar a sessão.
  2. Chame .connect() para abrir a conexão WebSocket.
  3. Chame conn.subscribe() para registrar um listener para as mensagens do actor.
  4. Chame conn.send() para enviar uma mensagem para o actor.
O exemplo a seguir se conecta a uma sessão do actor chatRoom, escuta mensagens e envia uma mensagem:
Para saber mais sobre conexões, veja conexões.

Executar ticks

Quando um trabalho precisa se repetir em um intervalo enquanto há clientes na sessão, execute ticks. Exemplos incluem transmitir o estado do jogo ou atualizar um timer de rodada. Para executar ticks:
  1. Defina tickIntervalMs com a duração do intervalo em milissegundos.
  2. Implemente shouldTick() para retornar true para continuar os ticks e false para pará-los.
  3. Em handleTick(), execute o trabalho de cada intervalo.
O exemplo a seguir executa um tick a cada segundo enquanto há pelo menos dois clientes na sessão, transmitindo uma contagem regressiva a cada tick:
Para saber mais sobre ticks, veja handlers e configurações de timers.

Agendar wakes

Quando um trabalho precisa ser executado uma vez em um horário específico, esteja a sessão ativa ou inativa, agende um wake. Exemplos incluem encerrar uma vez após 30 segundos ou fechar um lobby vazio. Para agendar um wake:
  1. Chame schedule() com uma chave e um horário para agendar o wake.
  2. Em handleWake(), verifique a chave e execute o trabalho desse wake.
  3. Quando o wake não for mais necessário, chame cancelSchedule() com a chave.
O exemplo a seguir agenda um tempo limite quando uma vez começa e transmite uma mensagem quando o tempo limite é disparado:
Para saber mais sobre wakes, veja handlers e configurações de timers.

Gerenciar conexões de clientes

Quando você precisa decidir quem pode entrar em uma sessão, responder a um cliente específico e alcançar todos os clientes da sessão, gerencie as conexões de clientes. Para gerenciar conexões de clientes:
  1. Em handleConnect(), verifique conn.identity e chame conn.reject() para recusar um cliente.
  2. Chame conn.send() para responder apenas a esse cliente.
  3. Em handleMessage(), chame broadcast() para alcançar todos os clientes conectados. Para identificar o remetente, inclua campos de conn na mensagem.
O exemplo a seguir rejeita clientes anônimos, envia o histórico para o cliente que está se conectando e transmite mensagens com o ID de usuário do remetente:
Para saber mais sobre conexões, veja conexões.

Persistir dados da sessão

Quando os valores precisam sobreviver a um período de inatividade, persista os dados da sessão. Exemplos incluem um tabuleiro, uma lista de histórico ou a vez atual. Para persistir dados da sessão:
  1. Em handleStart(), carregue os valores de this.storage para os campos da classe.
  2. Após cada mudança, chame this.storage.put() para salvar o valor atualizado.
  3. Para redefinir a sessão, chame this.storage.delete() ou this.storage.deleteAll().
O exemplo a seguir carrega um tabuleiro ao iniciar, salva-o após cada jogada e limpa o armazenamento quando o último cliente se desconecta:
Para saber mais sobre armazenamento, veja armazenamento.

Gravar dados de entidades a partir de uma sessão

Quando a sessão precisa criar ou atualizar registros do app, grave dados de entidades. Exemplos incluem uma pontuação final ou um pedido concluído. Para gravar dados de entidades a partir de uma sessão:
  1. Valide a mensagem recebida antes de gravar.
  2. Leia o ID do usuário em conn.identity.userId.
  3. Use this.client.asServiceRole para acesso elevado. Grave com uma chave estável, como o ID da sessão, para que um handler repetido atualize o mesmo registro.
O exemplo a seguir salva uma pontuação final para o cliente autenticado. Um salvamento posterior para a mesma sessão atualiza esse registro:
Para saber mais sobre acesso a entidades, veja acesso a entidades.

Chamar uma função de backend para trabalhos com secrets

Os actors podem ler secrets do app com secrets.get(). Quando um handler precisa de um trabalho que usa um secret, como chamar uma API externa com uma chave de API, recomendamos chamar uma função de backend. A função lê o secret e retorna o resultado, nunca o secret. Para chamar uma função de backend a partir de um actor:
  1. Crie uma função de backend que leia o secret com secrets.get(), faça o trabalho e retorne o resultado.
  2. Em um handler, chame this.client.functions.invoke() com o nome da função e os dados a serem enviados.
  3. Use o resultado na sua sessão, por exemplo transmitindo-o para os clientes conectados.
O exemplo a seguir mostra uma função de backend que lê uma chave de API e retorna uma tradução:
O exemplo a seguir chama essa função a partir de um actor e transmite o resultado:

Veja também

Esta página foi traduzida usando IA. Para as informações mais precisas e atualizadas, consulte a versão em inglês.