From f1cc5cab981743b8b40a5c4341cc8a492dcbcc22 Mon Sep 17 00:00:00 2001 From: narawat Date: Thu, 23 Oct 2025 06:58:52 +0700 Subject: [PATCH] update --- web/src/routes/+page.svelte | 48 +++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 8d471e6..c87f4b0 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -15,10 +15,9 @@ onMount(async () => { setStatus('connecting'); try { - const nc = await connect({ servers: 'wss://nats.yiem.cc' }); + nc = await connect({ servers: 'wss://nats.yiem.cc' }); setStatus('connected'); - // closed() resolves when connection closes or errors nc.closed().then((err) => { if (err) { console.error('NATS closed with error:', err); @@ -29,21 +28,37 @@ } }); - // optional: watch low-level disconnect/slow events via nc.transport - // (nats.js does not expose DOM events; rely on closed() and errors) - - // create a subscription and responder const sc = StringCodec(); const sub = nc.subscribe(SUBJECT); + (async () => { for await (const m of sub) { try { - const raw = sc.decode(m.data); - const payload = JSON.parse(raw); - if (payload?.text) message = payload.text; + const raw = sc.decode(m.data || new Uint8Array()); + // Defensive JSON parse + let payload; + try { + payload = JSON.parse(raw); + } catch (e) { + console.warn('received non-json payload', raw); + payload = null; + } + + // If payload has text, update UI + if (payload && typeof payload.text === 'string') { + message = payload.text; + } else { + message = 'received invalid payload'; + } + + // Reply if requester supplied reply subject if (m.reply) { - await nc.publish(m.reply, sc.encode(JSON.stringify(payload))); + const replyPayload = { text: `displaying: ${payload && payload.text ? payload.text : 'invalid'}` }; + await nc.publish(m.reply, sc.encode(JSON.stringify(replyPayload))); await nc.flush(); + console.log('replied', replyPayload); + } else { + console.log('no reply subject, not replying'); } } catch (e) { console.error('message handler error', e); @@ -51,15 +66,6 @@ } })(); - // quick verify: publish a ping and see if there is no error - try { - await nc.publish(SUBJECT, sc.encode(JSON.stringify({ text: 'ping-from-client' }))); - await nc.flush(); - console.log('published ping'); - } catch (e) { - console.error('publish error', e); - } - } catch (err) { console.error('connect failed', err); setStatus('error'); @@ -79,7 +85,3 @@
Message: {message}
- - - -