diff --git a/back/src/Model/GameRoom.ts b/back/src/Model/GameRoom.ts index 491dd4af..e907fcb7 100644 --- a/back/src/Model/GameRoom.ts +++ b/back/src/Model/GameRoom.ts @@ -104,6 +104,15 @@ export class GameRoom { public getUserById(id: number): User | undefined { return this.users.get(id); } + public getUsersByUuid(uuid: string): User[] { + const userList: User[] = []; + for (const user of this.users.values()) { + if (user.uuid === uuid) { + userList.push(user); + } + } + return userList; + } public join(socket: UserSocket, joinRoomMessage: JoinRoomMessage): User { const positionMessage = joinRoomMessage.getPositionmessage(); diff --git a/back/src/Services/SocketManager.ts b/back/src/Services/SocketManager.ts index a7a10f5f..178eacc0 100644 --- a/back/src/Services/SocketManager.ts +++ b/back/src/Services/SocketManager.ts @@ -701,8 +701,8 @@ export class SocketManager { return; } - const recipient = room.getUserByUuid(recipientUuid); - if (recipient === undefined) { + const recipients = room.getUsersByUuid(recipientUuid); + if (recipients.length === 0) { console.error( "In sendAdminMessage, could not find user with id '" + recipientUuid + @@ -711,14 +711,16 @@ export class SocketManager { return; } - const sendUserMessage = new SendUserMessage(); - sendUserMessage.setMessage(message); - sendUserMessage.setType("ban"); //todo: is the type correct? + for (const recipient of recipients) { + const sendUserMessage = new SendUserMessage(); + sendUserMessage.setMessage(message); + sendUserMessage.setType("ban"); //todo: is the type correct? - const serverToClientMessage = new ServerToClientMessage(); - serverToClientMessage.setSendusermessage(sendUserMessage); + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setSendusermessage(sendUserMessage); - recipient.socket.write(serverToClientMessage); + recipient.socket.write(serverToClientMessage); + } } public async banUser(roomId: string, recipientUuid: string, message: string): Promise { @@ -732,8 +734,8 @@ export class SocketManager { return; } - const recipient = room.getUserByUuid(recipientUuid); - if (recipient === undefined) { + const recipients = room.getUsersByUuid(recipientUuid); + if (recipients.length === 0) { console.error( "In banUser, could not find user with id '" + recipientUuid + @@ -742,19 +744,21 @@ export class SocketManager { return; } - // Let's leave the room now. - room.leave(recipient); + for (const recipient of recipients) { + // Let's leave the room now. + room.leave(recipient); - const banUserMessage = new BanUserMessage(); - banUserMessage.setMessage(message); - banUserMessage.setType("banned"); + const banUserMessage = new BanUserMessage(); + banUserMessage.setMessage(message); + banUserMessage.setType("banned"); - const serverToClientMessage = new ServerToClientMessage(); - serverToClientMessage.setBanusermessage(banUserMessage); + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setBanusermessage(banUserMessage); - // Let's close the connection when the user is banned. - recipient.socket.write(serverToClientMessage); - recipient.socket.end(); + // Let's close the connection when the user is banned. + recipient.socket.write(serverToClientMessage); + recipient.socket.end(); + } } async sendAdminRoomMessage(roomId: string, message: string) { diff --git a/front/src/Components/Chat/Chat.svelte b/front/src/Components/Chat/Chat.svelte index e39d1a59..a636205b 100644 --- a/front/src/Components/Chat/Chat.svelte +++ b/front/src/Components/Chat/Chat.svelte @@ -3,9 +3,12 @@ import { chatMessagesStore, chatVisibilityStore } from "../../Stores/ChatStore"; import ChatMessageForm from './ChatMessageForm.svelte'; import ChatElement from './ChatElement.svelte'; - import { afterUpdate, beforeUpdate } from "svelte"; + import {afterUpdate, beforeUpdate} from "svelte"; + import {HtmlUtils} from "../../WebRtc/HtmlUtils"; let listDom: HTMLElement; + let chatWindowElement: HTMLElement; + let handleFormBlur: { blur():void }; let autoscroll: boolean; beforeUpdate(() => { @@ -16,6 +19,12 @@ if (autoscroll) listDom.scrollTo(0, listDom.scrollHeight); }); + function onClick(event: MouseEvent) { + if (HtmlUtils.isClickedOutside(event, chatWindowElement)) { + handleFormBlur.blur(); + } + } + function closeChat() { chatVisibilityStore.set(false); } @@ -26,10 +35,10 @@ } - + -