마지막 업데이트 2026-07-22
RTCPeerConnection의 연결 상태 전이와 getStats 통계(RTT·패킷손실·트랙)를 수집해 로깅하고, 게스트 역할이면 소켓으로 호스트(모니터)에 송출하는 공용 모니터링 훅. 세션 매니저(#1, OpenAI WebRTC)와 V1 P2P(#11, useWebRTC)가 함께 쓴다.
peerConnection, onStatusUpdate(콜백), enableSocketEmission+roomId+connectionId(게스트 송출). 콜백·송출 둘 다 없으면 통계 루프는 시작조차 안 함.
| 메서드 | 역할 |
|---|---|
initializeStateTracking | 연결 시작 시각 기록(connectionDuration 기준) |
setupStateMonitoring(pc) | onconnectionstatechange/oniceconnectionstatechange 부착 → 전이 로깅·콜백(#1의 disconnect/fail 처리와 연동) |
startTrackMonitoring(pc) | 트랙 enabled/muted/readyState 주기 점검 |
startStatusUpdate(pc) | 2초 주기 getStats 수집·변경 시 송출 |
stopMonitoring(pc) | 인터벌 정리 + closed 상태 최종 송출 |
getSenders()/getReceivers()에서 id/kind/enabled/readyState/muted/direction.// RTT: candidate-pair(state=succeeded)의 currentRoundTripTime report.type === "candidate-pair" && state === "succeeded" → roundTripTime // 패킷손실: inbound/outbound-rtp packetLossRate = packetsLost / (packetsLost + packetsReceived) × 100 // 최댓값 보존
guest-webrtc-status {roomId, connectionId, status:{connectionState, tracks}} → 모니터 UI.인터벌 정리 후, 게스트면 마지막으로 guest-webrtc-status에 closed 상태를 송출해 모니터가 연결 종료를 즉시 반영하게 한다.
| 파일/심볼 | 역할 |
|---|---|
| use-webrtc-monitoring.ts (startStatusUpdate L322, setupStateMonitoring L91) | 모니터링 본체 |
| use-session-manager.ts (webrtcMonitoring) | OpenAI WebRTC 모니터링(#1) |
| use-web-rtc.ts (guest role) | V1 P2P 모니터링(#11) |