Parent Story
Task 개요
chatWebSocketService의 메시지 핸들러에 domain 필드 기반 라우팅을 추가합니다.
채팅 메시지와 게임 메시지를 명확히 분리하여 처리합니다.
변경 파일
src/domains/freetalk/services/chatWebSocketService.js
구현 내용
```javascript
handleMessage(data) {
const { domain, type, messageType } = data;
const msgType = type || messageType;
console.log('[ChatWebSocket] Received:', { domain, msgType, data });
// domain 필드가 있으면 우선 사용
if (domain === 'chat') {
this.handleChatMessage(msgType, data);
return;
}
if (domain === 'game') {
this.handleGameMessage(msgType, data);
return;
}
// 하위 호환: domain 없으면 messageType으로 추론
if (this.isChatMessageType(msgType)) {
this.handleChatMessage(msgType, data);
} else {
this.handleGameMessage(msgType, data);
}
}
isChatMessageType(msgType) {
return ['message', 'TEXT', 'USER_JOIN', 'USER_LEAVE', 'SYSTEM', 'SYSTEM_COMMAND'].includes(msgType);
}
handleChatMessage(msgType, data) {
switch (msgType) {
case 'message':
case 'TEXT':
this.callbacks.onMessage?.(data);
break;
case 'USER_JOIN':
case 'user_join':
this.callbacks.onUserJoin?.(data);
break;
case 'USER_LEAVE':
case 'user_leave':
this.callbacks.onUserLeave?.(data);
break;
case 'SYSTEM':
case 'SYSTEM_COMMAND':
this.callbacks.onMessage?.(data);
break;
}
}
handleGameMessage(msgType, data) {
switch (msgType) {
case 'GAME_START':
case 'game_start':
this.callbacks.onGameStart?.(data);
break;
case 'ROUND_START':
case 'round_start':
this.callbacks.onRoundStart?.(data);
break;
// ... 기존 게임 핸들러
}
}
```
Acceptance Criteria
예상 작업량
Parent Story
Task 개요
chatWebSocketService의 메시지 핸들러에 domain 필드 기반 라우팅을 추가합니다.
채팅 메시지와 게임 메시지를 명확히 분리하여 처리합니다.
변경 파일
src/domains/freetalk/services/chatWebSocketService.js구현 내용
```javascript
handleMessage(data) {
const { domain, type, messageType } = data;
const msgType = type || messageType;
}
isChatMessageType(msgType) {
return ['message', 'TEXT', 'USER_JOIN', 'USER_LEAVE', 'SYSTEM', 'SYSTEM_COMMAND'].includes(msgType);
}
handleChatMessage(msgType, data) {
switch (msgType) {
case 'message':
case 'TEXT':
this.callbacks.onMessage?.(data);
break;
case 'USER_JOIN':
case 'user_join':
this.callbacks.onUserJoin?.(data);
break;
case 'USER_LEAVE':
case 'user_leave':
this.callbacks.onUserLeave?.(data);
break;
case 'SYSTEM':
case 'SYSTEM_COMMAND':
this.callbacks.onMessage?.(data);
break;
}
}
handleGameMessage(msgType, data) {
switch (msgType) {
case 'GAME_START':
case 'game_start':
this.callbacks.onGameStart?.(data);
break;
case 'ROUND_START':
case 'round_start':
this.callbacks.onRoundStart?.(data);
break;
// ... 기존 게임 핸들러
}
}
```
Acceptance Criteria
예상 작업량