diff --git a/apps/chat/src/index.ts b/apps/chat/src/index.ts index 330e56d..990beed 100644 --- a/apps/chat/src/index.ts +++ b/apps/chat/src/index.ts @@ -88,22 +88,31 @@ app.get( }); }, onMessage(evt, ws) { - const msg = evt.data.toString(); - ws.wss.clients.forEach((c) => { - const client = c as ModifiedWebSocket; - if (client.readyState === client.OPEN && client.targetUsername === ws.targetUsername) { - c.send( - JSON.stringify({ - user: { - id: ws.user.id, - username: ws.personalChannel.name, - pfpUrl: ws.user.pfpUrl, - }, - message: msg, - }) - ); - } - }); + const msg = JSON.parse(evt.data.toString()); + if (msg.type === 'ping') { + ws.send( + JSON.stringify({ + type: 'pong', + }) + ); + return; + } else if (msg.type === 'message') { + ws.wss.clients.forEach((c) => { + const client = c as ModifiedWebSocket; + if (client.readyState === client.OPEN && client.targetUsername === ws.targetUsername) { + c.send( + JSON.stringify({ + user: { + id: ws.user.id, + username: ws.personalChannel.name, + pfpUrl: ws.user.pfpUrl, + }, + message: msg.message, + }) + ); + } + }); + } }, })) ); diff --git a/apps/web/src/components/app/ChatPanel/ChatPanel.tsx b/apps/web/src/components/app/ChatPanel/ChatPanel.tsx index 3323a58..f4e0fe4 100644 --- a/apps/web/src/components/app/ChatPanel/ChatPanel.tsx +++ b/apps/web/src/components/app/ChatPanel/ChatPanel.tsx @@ -28,6 +28,7 @@ export default function ChatPanel() { socket.onmessage = (event) => { try { const data = JSON.parse(event.data); + if (data.type === 'ping' || data.type === 'pong' || !data.user) return; setChatMessages((prev) => [...prev, data]); } catch (e) { console.log('Received message confirmation:', event.data); @@ -56,7 +57,7 @@ export default function ChatPanel() { if (!message.trim()) return; if (socketRef.current && socketRef.current.readyState === WebSocket.OPEN) { - socketRef.current.send(message); + socketRef.current.send(JSON.stringify({ type: 'message', message })); setMessage(''); } else { const socket = new WebSocket( @@ -65,12 +66,21 @@ export default function ChatPanel() { }/api/stream/chat/ws/${username}` ); socket.onopen = () => { - socket.send(message); + socket.send(JSON.stringify({ type: 'message', message })); setMessage(''); }; } }; + useEffect(() => { + const interval = setInterval(() => { + if (socketRef.current && socketRef.current.readyState === WebSocket.OPEN) { + socketRef.current.send(JSON.stringify({ type: 'ping' })); + } + }, 5000); + return () => clearInterval(interval); + }, []); + return (
diff --git a/packages/auth/package.json b/packages/auth/package.json index cbac77e..16be15f 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@hctv/auth", - "version": "0.0.0", + "version": "1.0.0", "exports": { ".": { "types": "./dist/index.d.ts", diff --git a/packages/hono-ws/vitest.config.ts b/packages/hono-ws/vitest.config.ts deleted file mode 100644 index 74923f8..0000000 --- a/packages/hono-ws/vitest.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineProject } from 'vitest/config' - -export default defineProject({ - test: { - globals: true, - }, -})