04 Estados

UI resiliente

O chat é uma máquina pequena: idle, connecting, streaming, stalled, retrying, failed, done. Timeout, queda, offline e fila cheia são transições, não um monte de if na tela.

Como usar

A sessão é uma máquina com fases. Queda, pausa e falta de rede são transições, com retry e uma fila.

  1. Escolha Normal, Queda no meio ou Pausa longa.
  2. Aperte Enviar.
  3. Compare o que aconteceria sem tratamento com o que a máquina fez.

A fase em inglês é o estado da máquina. O rótulo ao lado está em português.

Ver o código, abre no GitHub em uma nova aba

Pedido

Sessão

Modo ...
Fase idle
Rótulo pronto
Tentativa 0
Fila 0
Pausas de leitura 0
Rede online

Sem tratar a falha

Aguardando

Ainda não rodei.

Com a máquina

Aguardando

Ainda não rodei.

Parado Pronto


          

A fila segura os tokens que já chegaram e ainda não foram pintados. Se ela passa de 16, eu paro de ler a rede até cair para 6. Isso é backpressure. Uma pausa maior que 1,2 s, ou uma queda, vai para retrying. A espera começa em 350 ms e dobra. Sem rede, eu vou direto para failed.