gioser

sergio/humanoid

HTML 38Markdown 1TOML 10 Sutichaykuna

Consola: error de WS con detalle diagnóstico (clase + HTTP)

onFailure tiraba el mensaje útil: una caída de handshake llegaba como
"fallo del WebSocket" a secas (t.message null). Ahora reporta clase de
excepción + código HTTP de la respuesta, para distinguir 401, conexión
rechazada, proxy sin upgrade o TLS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

cc26c1354aeae97fdb9e4250a9e683a56bf1bef8 · ruwaq sergio · (4 killa ñawpaq) · tayta 44e47fe5a · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +10 −1

diff --git a/consola/src/main/java/com/rizoma/consola/data/GatewayClient.kt b/consola/src/main/java/com/rizoma/consola/data/GatewayClient.kt
index e3edeab..4eba9da 100644
--- a/consola/src/main/java/com/rizoma/consola/data/GatewayClient.kt
+++ b/consola/src/main/java/com/rizoma/consola/data/GatewayClient.kt
@@ -120,7 +120,16 @@ class GatewayClient(@Volatile var config: GatewayConfig) {
             }
 
             override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
-                listener.onError(t.message ?: "fallo del WebSocket")
+                // Detalle diagnóstico: el handshake suele fallar ANTES del
+                // primer mensaje. Sin esto, una caída de conexión llega como
+                // "fallo del WebSocket" a secas (t.message null) y no se sabe
+                // si es 401, conexión rechazada, proxy sin upgrade, o TLS.
+                val detail = buildString {
+                    append(t.javaClass.simpleName)
+                    t.message?.let { append(": "); append(it) }
+                    response?.let { append(" · HTTP "); append(it.code) }
+                }
+                listener.onError(detail)
                 listener.onClosed(t.message)
             }
         })