# Session End Event - Quick Start Guide ## ๐Ÿš€ Quick Start ### Listen for Session End Events ```javascript const WebSocket = require('ws'); const ws = new WebSocket('ws://localhost:5000/api/sessions/live'); ws.on('open', () => { // 1. Authenticate ws.send(JSON.stringify({ type: 'auth', token: 'YOUR_JWT_TOKEN' })); }); ws.on('message', (data) => { const msg = JSON.parse(data.toString()); if (msg.type === 'auth_success') { // 2. Subscribe to session ws.send(JSON.stringify({ type: 'subscribe', sessionId: 17 })); } if (msg.type === 'session.ended') { // 3. Handle session end console.log('Session ended!'); console.log(`Games played: ${msg.data.session.games_played}`); // Announce to your users here } }); ``` ## ๐Ÿ“ฆ Event Format ```json { "type": "session.ended", "timestamp": "2025-11-01T02:30:45.123Z", "data": { "session": { "id": 17, "is_active": 0, "games_played": 5 } } } ``` ## ๐Ÿงช Test It ```bash # Get your JWT token first curl -X POST http://localhost:5000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"key":"YOUR_ADMIN_KEY"}' # Run the test script node ../tests/test-session-end-websocket.js 17 YOUR_JWT_TOKEN # In another terminal, close the session curl -X POST http://localhost:5000/api/sessions/17/close \ -H "Authorization: Bearer YOUR_JWT_TOKEN" ``` ## ๐Ÿค– Bot Integration When your bot receives `session.ended`: ```javascript if (msg.type === 'session.ended') { const { id, games_played } = msg.data.session; // Announce to IRC/Discord/etc bot.announce(`๐ŸŒ™ Game Night has ended! We played ${games_played} games.`); bot.announce('Thanks for playing!'); } ``` ## ๐Ÿ“š Full Documentation See [SESSION_END_WEBSOCKET.md](SESSION_END_WEBSOCKET.md) for complete documentation. ## โšก Key Points - โœ… **Instant** - No polling needed - โœ… **Reliable** - Broadcast to all subscribers - โœ… **Simple** - Same format as `game.added` - โœ… **Tested** - Test script included ## ๐Ÿ”— Related Events | Event | When | |-------|------| | `session.started` | Session created | | `game.added` | Game starts | | `session.ended` | Session closes | | `vote.received` | Vote cast |