Skip to content

Commit 307832d

Browse files
committed
refactor: chat server blacklist 로직 수정
refactor: chat server 의 blacklist user 를 가져올 때, server.handshake 를 참조하는 것에서 user 에 미리 등록해놓고 user 에서 가져오기
1 parent 92f5ea4 commit 307832d

File tree

3 files changed

+29
-13
lines changed

3 files changed

+29
-13
lines changed

backend/chatServer/src/chat/chat.gateway.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
4747

4848
async handleConnection(client: Socket) {
4949
console.log(`Client connected: ${client.id}`);
50-
const user = await this.roomService.createUser(client.id);
50+
const user = await this.roomService.createUser(client);
5151
console.log(user);
5252

5353
/*
@@ -102,7 +102,9 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
102102
const user = await this.roomService.getUserByClientId(client.id);
103103
const normalOutgoingMessage: Omit<NormalOutgoingMessageDto, 'owner'> = {
104104
roomId,
105-
...user,
105+
nickname: user.nickname,
106+
color: user.color,
107+
entryTime: user.entryTime,
106108
msg,
107109
msgTime: new Date().toISOString(),
108110
msgType: 'normal',
@@ -131,7 +133,9 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
131133
const user = await this.roomService.getUserByClientId(client.id);
132134
const questionWithoutId: Omit<QuestionDto, 'questionId'> = {
133135
roomId,
134-
...user,
136+
nickname: user.nickname,
137+
color: user.color,
138+
entryTime: user.entryTime,
135139
msg,
136140
msgTime: new Date().toISOString(),
137141
msgType: 'question',
@@ -161,7 +165,9 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
161165
const user = await this.roomService.getUserByClientId(client.id);
162166
const noticeOutgoingMessage: NoticeOutgoingMessageDto = {
163167
roomId,
164-
...user,
168+
nickname: user.nickname,
169+
color: user.color,
170+
entryTime: user.entryTime,
165171
msg,
166172
msgTime: new Date().toISOString(),
167173
msgType: 'notice'
@@ -173,12 +179,10 @@ export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewa
173179
@SubscribeMessage(CHATTING_SOCKET_DEFAULT_EVENT.BAN_USER)
174180
async handleBanUserMessage(@ConnectedSocket() client: Socket, @MessageBody() payload: BanUserIncomingMessageDto) {
175181
const { roomId, socketId } = payload;
176-
const banUser = this.server.sockets.sockets.get(socketId);
177-
const address = banUser?.handshake.address.replaceAll('::ffff:', '');
178-
179-
if(!address) throw new ChatException(CHATTING_SOCKET_ERROR.INVALID_USER, roomId);
180-
181-
const userAgent = banUser?.handshake.headers['user-agent'];
182+
const banUser = await this.roomService.getUserByClientId(socketId);
183+
console.log('banUSer = ', banUser);
184+
if(!banUser) throw new ChatException(CHATTING_SOCKET_ERROR.INVALID_USER, roomId);
185+
const { address, userAgent } = banUser;
182186
if(!userAgent) throw new ChatException(CHATTING_SOCKET_ERROR.INVALID_USER, roomId);
183187

184188
await this.roomService.addUserToBlacklist(roomId, address, userAgent);

backend/chatServer/src/room/room.service.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import path from 'path';
1111
import { fileURLToPath } from 'url';
1212
import { dirname } from 'path';
1313
import { ChatException, CHATTING_SOCKET_ERROR } from '../chat/chat.error';
14+
import { Socket } from 'socket.io';
1415

1516
// 현재 파일의 URL을 파일 경로로 변환
1617
const __filename = fileURLToPath(import.meta.url);
@@ -24,8 +25,10 @@ function createRandomNickname(){
2425
return `${getRandomAdjective()} ${getRandomNoun()}`;
2526
}
2627

27-
function createRandomUserInstance(): User {
28+
function createRandomUserInstance(address: string, userAgent: string): User {
2829
return {
30+
address,
31+
userAgent,
2932
nickname: createRandomNickname(),
3033
color: getRandomBrightColor(),
3134
entryTime: new Date().toISOString()
@@ -139,10 +142,17 @@ export class RoomService implements OnModuleInit, OnModuleDestroy {
139142
}
140143

141144
// 유저 생성
142-
async createUser(clientId: string) {
143-
const newUser = createRandomUserInstance();
145+
async createUser(socket: Socket) {
146+
const clientId = socket.id;
147+
const address = socket.handshake.address.replaceAll('::ffff:', '');
148+
const userAgent = socket.handshake.headers['user-agent'];
149+
150+
if(!address || !userAgent) throw new ChatException(CHATTING_SOCKET_ERROR.INVALID_USER);
151+
152+
const newUser = createRandomUserInstance(address, userAgent);
144153
const isCreatedDone = await this.redisRepository.createUser(clientId, newUser);
145154
if(!isCreatedDone) throw new ChatException(CHATTING_SOCKET_ERROR.INVALID_USER);
155+
console.log(newUser);
146156
return newUser;
147157
}
148158

backend/chatServer/src/room/user.interface.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
interface User {
2+
address: string;
3+
userAgent: string;
24
entryTime: string;
35
nickname: string;
46
color: string;

0 commit comments

Comments
 (0)