From 6ae45d9c6af20f6c0d36e40a68789340f9d22592 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Fri, 5 Jan 2024 18:52:34 +0000 Subject: [PATCH 1/2] feat(#25): Add ability to kick a user --- src/components/UsersList.svelte | 90 ++++++++++++++++++++- src/routes/estimation/[roomId]/+page.svelte | 10 ++- src/server/classes/Room.ts | 9 +++ src/server/websocket.ts | 11 +++ 4 files changed, 118 insertions(+), 2 deletions(-) diff --git a/src/components/UsersList.svelte b/src/components/UsersList.svelte index eb0c2a1..508d680 100644 --- a/src/components/UsersList.svelte +++ b/src/components/UsersList.svelte @@ -5,6 +5,7 @@ export let showEstimates: boolean = false; export let userId: string; export let handleEmojiTrigger: (cardId: string, emoji: string) => void; + export let handleKickUser: (userId: string) => void; let customEmoji = '🧽'; // default emoji let shieldActive = false; @@ -101,9 +102,35 @@ document.body.removeChild(emojiElement); }, 2000); } + + let selectedUserId = ''; + + export function kickUser() { + if (selectedUserId) { + let confirmed = confirm('Are you sure you want to kick this user?'); + + if (confirmed) { + console.log('confirmed'); + handleKickUser(selectedUserId); + } + } + } - +
+ + +
+ + + +
+
@@ -128,6 +155,19 @@
diff --git a/src/routes/estimation/[roomId]/+page.svelte b/src/routes/estimation/[roomId]/+page.svelte index a5d1912..bf32025 100644 --- a/src/routes/estimation/[roomId]/+page.svelte +++ b/src/routes/estimation/[roomId]/+page.svelte @@ -97,6 +97,14 @@ }); } + function handleKickUser(userId: string) { + console.log('sending kick-user message'); + sendMessage(socket, { + type: 'kick-user', + userId + }); + } + function restartEstimation() { sendMessage(socket, { roomId: data.roomId, type: 'restart-estimation' }); } @@ -167,7 +175,7 @@ {/if} - +
{#if showRestartButton} diff --git a/src/server/classes/Room.ts b/src/server/classes/Room.ts index ae349a1..1d4bd4e 100644 --- a/src/server/classes/Room.ts +++ b/src/server/classes/Room.ts @@ -66,6 +66,15 @@ export class Room { return null; } + getWebSocketByUserId(userId: String): WebSocket | null { + for (const [ws, u] of this.users) { + if (u.userId === userId) { + return ws; + } + } + return null; + } + broadcast(message: any) { this.users.forEach((user, client) => { if (client.readyState === WebSocket.OPEN) { diff --git a/src/server/websocket.ts b/src/server/websocket.ts index 11b82b6..18d0563 100644 --- a/src/server/websocket.ts +++ b/src/server/websocket.ts @@ -167,6 +167,17 @@ wss.on('connection', (ws: WebSocket, req) => { if (room) { broadcastToRoom(room.id, 'pong'); } + } else if (data.type === 'kick-user') { + console.log('kick user message received'); + if (room) { + const userIdToKick = data.userId; + const ws = room.getWebSocketByUserId(userIdToKick); + console.log(userIdToKick, ws); + if (ws) { + console.log('closing ws'); + ws.close(); + } + } } }); From 2df4e25eda4b14f55663919497c40a007f747cb1 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Fri, 5 Jan 2024 18:52:47 +0000 Subject: [PATCH 2/2] chore(*): Update copyright year --- src/routes/+layout.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 6337b76..3388822 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -13,6 +13,8 @@ localStorage.setItem('theme', theme); } } + + const currentYear = new Date().getFullYear();