Sem tratar a falha
Aguardando
Ainda não rodei.
04 Estados
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.
A sessão é uma máquina com fases. Queda, pausa e falta de rede são transições, com retry e uma fila.
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 abaAguardando
Ainda não rodei.
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.