WebSocket API Documentation

Writing Board - Real-time Collaboration API for iOS

연결 정보

Endpoint: wss://hsh-server.com/ws-stomp
Protocol: STOMP over WebSocket
Authentication: JWT Token (handshake 시 전달)
에러 메시지 구독: /user/queue/errors
모든 API에서 에러 발생 시 개인 큐로 에러 메시지가 전송됩니다.

1. 채팅 메시지

SEND /app/room/{roomUuid}/chat

채팅 메시지 전송

Request Body:
{
  "content": "string"  // max 2000자
}

/topic/room/{roomUuid}

채팅 메시지 수신

Response:
{
  "id": "string",
  "roomUuid": "string",
  "senderId": number,
  "senderName": "string",
  "senderProfileImage": "string",
  "content": "string",
  "messageType": "TEXT | SYSTEM",
  "timestamp": "ISO-8601"
}

2. 음성 시그널 (WebRTC)

SEND /app/room/{roomUuid}/voice

WebRTC 시그널 전송

Request Body:
{
  "signalType": "OFFER | ANSWER | ICE_CANDIDATE | JOIN | LEAVE",
  "data": "string"  // max 10000자
}

/topic/room/{roomUuid}/voice

WebRTC 시그널 수신

Response:
{
  "roomUuid": "string",
  "senderId": number,
  "senderName": "string",
  "signalType": "OFFER | ANSWER | ICE_CANDIDATE | JOIN | LEAVE",
  "data": "string",
  "timestamp": "ISO-8601"
}

3. 드로잉 스트로크 (PencilKit)

SEND /app/room/{roomUuid}/asset/{roomAssetId}/drawing

PencilKit 드로잉 스트로크 전송 (ADD/REMOVE만 가능, SNAPSHOT은 REST API 사용)

Request Body:
{
  "type": "ADD | REMOVE",  // SNAPSHOT은 WebSocket 불가
  "roomAssetId": number,
  "pageIndex": number,     // 0-999
  "strokeId": "string",    // max 100자
  "strokeData": "string",  // max 100000자 (PencilKit binary data)
  "version": number        // optional
}

/topic/room/{roomUuid}/drawing

드로잉 스트로크 수신 (실시간 동기화)

Response:
{
  "roomUuid": "string",
  "roomAssetId": number,
  "senderId": number,
  "senderName": "string",
  "type": "ADD | REMOVE",
  "pageIndex": number,
  "strokeId": "string",
  "strokeData": "string",
  "version": number,
  "timestamp": "ISO-8601"
}

참고사항