Skip to content

[TASK] chatWebSocketService에 domain 기반 메시지 라우팅 추가 #176

Description

@DDINGJOO

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

  • domain === 'chat' → handleChatMessage 호출
  • domain === 'game' → handleGameMessage 호출
  • domain 없음 → messageType으로 추론 (하위 호환)
  • 모든 기존 메시지 정상 처리 (회귀 없음)

예상 작업량

  • 1시간

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions