///
import { EventEmitter } from 'events';
import { Deferred } from '../internal/promise';
import { Room } from '../room';
import { RemotePeer } from '../remote_peer';
import { LocalPeer } from '../local_peer';
import { PeerConnection } from '../peer_connection';
import { Channel, Signaling, SignalingPeer } from '../types';
export declare type CallingStatus = Record;
declare type DataCb = (error: Error | undefined, data?: any) => void;
export declare type CallingState = "idle" | "connecting" | "connected" | "closed" | "failed";
export interface CallingOptions {
pingInterval: number;
timeout: number;
remotePing?: number;
remoteTimeout?: number;
}
export declare class Calling extends EventEmitter {
id?: string;
channel: Channel;
room_options: Record;
calling_options: CallingOptions;
next_tid: number;
answers: Record | DataCb>;
hello_p: Promise;
ping_timeout?: ReturnType;
timeout_timeout?: ReturnType;
state: CallingState;
constructor(channel: Channel, room_options: Record, calling_options?: Partial);
connect(): Promise;
request(msg: any, cb: DataCb): void;
request(msg: any): Promise;
ping(): Promise;
connectionAlive(): void;
resetPing(): void;
resetTimeout(): void;
subscribe(nsid: string): Promise;
register(namespace: string): Promise;
unregister(namespace: string): Promise;
room(room?: string, options?: Record): CallingRoom;
room_signaling(room?: string): CallingSignaling;
setStatus(status: Record): Promise;
close(): Promise;
private setState;
}
export declare class CallingNamespace extends EventEmitter {
calling: Calling;
id: string;
users: Record;
rooms: Record;
constructor(calling: Calling, id: string);
addUser(id: string, status: Record): CallingNamespaceUser;
addRoom(id: string, status: Record, peers: any): CallingNamespaceRoom;
unsubscribe(): Promise;
}
export declare class CallingNamespaceUser extends EventEmitter {
id: string;
status: CallingStatus;
pending: boolean;
constructor(id: string, status: Record, pending?: boolean);
}
export declare class CallingNamespaceRoom extends EventEmitter {
id: string;
status: CallingStatus;
peers: Record;
constructor(id: string, status: Record);
addPeer(id: string, status: Record, pending: boolean): CallingNamespaceUser;
}
export declare class CallingNamespaceRoomPeer extends EventEmitter {
id: string;
status: CallingStatus;
pending: boolean;
accepted_d: Deferred;
constructor(id: string, status: Record, pending: boolean);
accepted(): Promise;
}
export declare class CallingSignaling extends EventEmitter implements Signaling {
id?: string;
calling: Calling;
connect_fun: (peer_status: Record, cb: DataCb) => void;
status: CallingStatus;
peer_status: CallingStatus;
peers: Record;
initialized: boolean;
connect_p?: Promise;
constructor(calling: Calling, connect_fun: (peer_status: Record, cb: DataCb) => void);
init(data: any): void;
connect(): Promise;
addPeer(id: string, status: Record, pending: boolean, first: boolean): CallingSignalingPeer;
close(): Promise;
setStatus(status: Record): Promise;
invite(user: CallingNamespaceUser | string, data?: any): Promise;
setRoomStatusSafe(key: string, value: any, previous: any): Promise;
setRoomStatus(key: string, value: any): Promise;
register(namespace: string): Promise;
unregister(namespace: string): Promise;
}
export declare class CallingSignalingPeer extends EventEmitter implements SignalingPeer {
room: CallingSignaling;
id: string;
status: CallingStatus;
pending: boolean;
first: boolean;
accepted_d: Deferred;
constructor(room: CallingSignaling, id: string, status: Record, pending: boolean, first: boolean);
accepted(): Promise;
send(event: string, data: any): Promise;
}
export declare class CallingInInvitation extends EventEmitter {
calling: Calling;
handle: string;
sender: string;
data: any;
cancelled: boolean;
constructor(calling: Calling, handle: string, sender: string, data: any);
signaling(): CallingSignaling;
deny(): Promise;
}
export declare class CallingOutInvitation {
calling: Calling;
handle: string;
user: string;
defer: Deferred;
pending: boolean;
constructor(calling: Calling, handle: string, user: string);
response(): Promise;
cancel(): Promise;
}
export declare class CallingRoom extends Room {
peers: Record;
constructor(signaling: CallingSignaling, options: Record);
createPeer(pc: PeerConnection, signaling: CallingSignalingPeer): CallingPeer;
invite(user: CallingNamespaceUser | string, data: any): Promise;
register(nsid: string): Promise;
unregister(nsid: string): Promise;
}
export declare class CallingInvitationRoom extends CallingRoom {
invitation: CallingInInvitation;
sender_id: string;
data: any;
constructor(invitation: CallingInInvitation, options: Record, sender_id: string, data: any);
sender(): CallingPeer;
deny(): Promise;
}
export declare class CallingPeer extends RemotePeer {
signaling: CallingSignalingPeer;
constructor(pc: PeerConnection, signaling: CallingSignalingPeer, local: LocalPeer, options: Record);
connect(): Promise;
}
export {};