import { Snapshot } from "../dto/snapshot.js"; import { HandlerType, type PeerEventMap, type PeerID, type WebRtcConfig, type WebRtcDispatchPayload } from "../types/web-rtc.js"; /** * PeerJS를 이용한 WebRtc 통신을 하는 클래스 * @remarks 방장은 모든 사용자들과 연결되고, 사용자들은 방장만 연결되는 구조입니다. */ export declare class WebRTC { /** * 사용자와의 연결을 관리하기 위한 객체 */ private connections; private peerId; /** * PeerJS의 {@link PeerType} 객체 */ private peer; /** * Peer 인스턴스의 초기화 상태를 나타내는 Promise */ private initPromise; /** * 재연결 횟수를 관리하는 Map 객체 */ private reconnectCount; /** * Peer별로 예약된 재연결 타이머 id를 관리하는 Map 객체 */ private reconnectTimeoutIds; /** * 최대 재연결 횟수를 설정하는 변수 * @remarks 외부에서 설정을 통해 변경될수 있습니다. */ private maxReconnectCount; /** * 재연결 시도 간격을 설정하는 변수 * @remarks 외부에서 설정을 통해 변경될수 있습니다. */ private reconnectTimeout; /** * 시그널링 서버 재연결을 시도한 횟수 * @remarks {@link maxReconnectCount}를 넘지 않도록 재연결 시도 횟수를 추적합니다. */ private signalReconnectCount; /** * 예약된 시그널링 서버 재연결 타이머 id * @remarks 중복 재연결 예약을 방지하고 destroy/reset 시 타이머를 정리하기 위해 사용합니다. */ private signalReconnectTimeoutId; /** * PeerJS의 주요 이벤트 발생 시 실행될 외부 커스텀 핸들러 모음 */ private customHandlers; /** * 시그널링 서버 재연결시 Open 이벤트 중복 실행되지 않기 위한 플래그 변수 */ private signalReconnected; private destroyed; /** * 데이터베이스에 업데이트를 요청하는 메서드 * @remarks 명시적 콜백을 위한 메서드 */ onUpdateDatabase: (data: WebRtcDispatchPayload) => void; /** * 최신 스냅샷을 가져오기 위한 메서드 * @remarks 명시적 콜백을 위한 메서드 * @returns 저장소에서 가져온 최신 스냅샷 */ onGetSnapshot: () => Snapshot; /** * 데이터베이스 동기화 요청 메서드 * @remarks 명시적 콜백을 위한 메서드 */ onSyncDatabase: (snapshot: Snapshot) => void; /** * 방장 상태를 확인하기 위한 메서드 * @remarks 명시적 콜백을 위한 메서드 * @returns 방장 상태인 경우 True */ onGetIsRoomChief: () => boolean; /** * 저장소를 초기화하기 위한 메서드 * @remarks 명시적 콜백을 위한 메서드 */ onStorageClear: () => void; /** * PeerJS의 Peer 객체를 생성할 때 사용할 옵션 */ private peerOptions; /** * 새로운 WebRtc 인스턴스를 생성 * @param [config] - 외부 커스텀 {@link WebRtcConfig} 객체 (선택 사항) */ constructor(config?: WebRtcConfig); /** * peer 객체의 초기 세팅을 위한 메서드 * @remarks PeerJS의 인스턴스 생성 및 주요 핵심 이벤트를 연결합니다. * @param resetStorage 기존에 저장된 저장소를 초기화하여 시작할지 여부 (기본값 : false) * @returns 초기화 상태 확인을 위한 {@link initPromise} * @throws SSR/Node.js 환경과 {@link RTCPeerConnection}이 없을때 발생합니다. */ init(resetStorage?: boolean): Promise; private startPeerSetup; /** * 시그널링 서버 재연결을 예약하는 메서드 * @remarks 이미 예약된 재연결이 있으면 중복 실행하지 않고, 재시도 횟수가 최대값을 넘으면 실패 상태를 전달합니다. */ private scheduleSignalReconnect; /** * 다른 Peer와 연결되었을때 호출되어 주요 이벤트를 연결하는 메서드 * @param conn - 연결된 Peer {@link DataConnection} 객체 */ private handleConnection; /** * 연결 시도 중 등록한 이벤트 리스너와 timeout을 한 번에 정리하기 위한 lifecycle helper를 생성합니다. * @remarks timeout, close, error 이후 늦게 도착한 connection 이벤트가 상태를 다시 변경하지 않도록 사용합니다. * @param conn - 정리 대상 {@link DataConnection} 객체 */ private createConnectionLifecycle; /** * DataConnection에 등록된 이벤트 리스너를 제거합니다. * @remarks PeerJS 또는 EventEmitter 구현체에 따라 `off`와 `removeListener` 중 지원하는 API가 다를 수 있어 둘 다 대응합니다. * @param conn - 리스너를 제거할 {@link DataConnection} 객체 * @param event - 리스너를 제거할 connection 이벤트 이름 * @param handler - 제거할 이벤트 핸들러 */ private removeConnectionListener; /** * 방장인 경우 연결된 Peer에 스냅샷 전송하는 메서드 * @param peerId 전송할 Peer 아이디 */ private syncDatabase; /** * 외부에서 설정하기 위한 핸들러 설정 메서드 * @param event - 설정할 핵심 이벤트 {@link HandlerType} * @param handler - 할당할 핸들러 {@link PeerEventMap} */ setHandler(event: K, handler: PeerEventMap[K]): void; /** * 연결 정보를 정리하고 재연결을 시도하는 메서드 * @param peerId - 연결이 끊긴 Peer 아이디 * @param endDisconnect - 재연결 실패, 재연결 완료등 마무리 되었을때 호출되는 메서드 */ private handleDisconnect; /** * 연결된 모든 피어들에게 데이터를 전송하는 메서드 * @param data - 피어들에게 보낼 {@link WebRtcDispatchPayload} 객체 */ send(data: WebRtcDispatchPayload): void; /** * 다른 피어와 연결을 요청하는 메서드 * @param targetId 연결할 Peer 아이디 * @throws 현재 피어가 존재(초기화)하지 않을때 발생합니다. */ connect(targetId: PeerID): Promise; /** * 메모리 할당 해제를 위한 메서드 * @remark 연결된 모든 피어들을 Close 처리됩니다. */ destroy(): void; private resetPeerState; private clearReconnectTimeout; private clearReconnectTimeouts; get connectionsLength(): number; } //# sourceMappingURL=web-rtc.d.ts.map