@klever-one/web-sdk
Version:
Web SDK for integrating real-time room management and streaming functionality into web applications
98 lines (97 loc) • 3.59 kB
TypeScript
import { ConnectionStatus, RoomInfo } from '../types';
export declare class RoomManager {
#private;
private static instance;
private apiKey;
private templatePersonaId?;
private personaId?;
private userId?;
private onMessageReceived?;
private roomId;
private token;
private checkRoom;
private webSocket;
private reconnectAttempts;
private maxReconnectAttempts;
private reconnectTimeout;
private readonly STUDIO_API_PREFIX;
private readonly STUDIO_ROOM_PREFIX;
private readonly API_KEY_HEADER;
private readonly BASE_URL;
private heartbeatInterval;
private readonly HEARTBEAT_INTERVAL;
private readonly HEARTBEAT_MESSAGE;
private connectionManager;
private eventBus;
private statusListeners;
private roomInfoListeners;
private disconnectListeners;
private errorHandlers;
private idleTimeoutHandler;
private pageUnloadHandler;
private unsubscribeIdleTimeout;
private unsubscribePageUnload;
private constructor();
static hasInstance(): boolean;
static getInstance(apiKey?: string, templatePersonaId?: string | null, personaId?: string | null, userId?: string | null, onMessageReceived?: (event: MessageEvent) => void): RoomManager;
get connectionStatus(): ConnectionStatus;
get roomInfo(): RoomInfo | null;
addStatusListener(listener: (status: ConnectionStatus) => void): void;
removeStatusListener(listener: (status: ConnectionStatus) => void): void;
addRoomInfoListener(listener: (roomInfo: RoomInfo | null) => void): void;
removeRoomInfoListener(listener: (roomInfo: RoomInfo | null) => void): void;
addDisconnectListener(listener: () => void): void;
removeDisconnectListener(listener: () => void): void;
addErrorHandler(handler: (error: Error) => void): () => void;
private setConnectionStatus;
private setRoomInfo;
private notifyStreamingManagerDisconnect;
handleStreamingDisconnect(): void;
private createRoom;
private checkRoomStatus;
private connectRoom;
requestInitialData(): void;
private handleWebSocketOpen;
private handleWebSocketMessage;
private handleInitialDataMessage;
private handleError;
private handleWebSocketError;
private handleWebSocketClose;
private attemptReconnect;
private initiateWebSocketConnection;
private waitForWebSocketConnection;
reconnect(): Promise<void>;
private static throttledInitializeRoom;
_initializeRoom({ isReconnect, }: {
isReconnect?: boolean | null;
}): Promise<void>;
initializeRoom({ isReconnect, }: {
isReconnect?: boolean | null;
}): Promise<void>;
sendMessage(message: string | object | ArrayBuffer | Blob): Promise<void>;
private sendMessageInternal;
createMessageBuffer({ action, payload, header, }: {
action: string;
payload: Uint8Array;
header: Uint8Array;
}): Uint8Array;
/**
* WebSocket 전송 전 연결 상태를 확인하는 동기화 함수
*/
private synchronizedSendMessage;
/**
* JSON 데이터를 청크 단위로 전송하는 함수
* - payload: 전송할 Uint8Array 데이터
* - actionName: 첫 청크에 포함할 액션
* - chunkSize: 각 청크의 크기 (기본값: 16000)
*/
sendDataInChunks({ payload, actionName, chunkSize, }: {
payload: Uint8Array;
actionName: string;
chunkSize?: number;
}): Promise<void>;
disconnect(): void;
private startHeartbeat;
private stopHeartbeat;
private generateEventId;
}