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();
+ }
+ }
}
});