///
import { EventEmitter } from 'events';
import { RemotePeer } from './remote_peer';
import { LocalPeer } from './local_peer';
import { PeerConnection } from './peer_connection';
import { Signaling, SignalingPeer } from './types';
export declare type RoomState = "idle" | "connecting" | "connected" | "closed" | "failed";
/**
* @module rtc
*/
/**
* A virtual room which connects multiple Peers
* @class rtc.Room
*
* @constructor
* @param {String} name The name of the room. Will be passed on to signaling
* @param {rtc.Signaling | String} signaling The signaling to be used. If you pass a string it will be interpreted as a websocket address and a palava signaling connection will be established with it.
* @param {Object} [options] Various options to be used in connections created by this room
* @param {Boolean} [options.auto_connect=true] Whether remote peers are connected automatically or an explicit `RemotePeer.connect()` call is needed
* @param {String} [options.stun] The URI of the STUN server to use
* @param {rtc.LocalPeer} [options.local] The local user
*/
export declare class Room = Signaling> extends EventEmitter {
signaling: S;
options: Record;
local: LocalPeer;
peers: Record;
join_p?: Promise;
state: RoomState;
/**
* A new peer is encountered in the room. Fires on new remote peers after joining and for all peers in the room when joining.
* @event peer_jopined
* @param {rtc.RemotePeer} peer The new peer
*/
/**
* A peer left the room.
* @event peer_left
* @param {rtc.RemotePeer} peer The peer which left
*/
/**
* A peer changed its status.
* @event peer_status_changed
* @param {rtc.RemotePeer} peer The peer which changed its status
* @param {Object} status The new status
*/
/**
* The connection to the room was closed
* @event closed
*/
/**
* The underlying signaling implementation as provided in constructor
* @property signaling
* @type rtc.signaling.Signaling
*/
/**
* The local peer
* @property local
* @type rtc.LocalPeer
*/
constructor(signaling: S, options: Record);
/**
* Joins the room. Initiates connection to signaling server if not done before.
* @method join
* @return {Promise} A promise which will be resolved once the room was joined
*/
connect(): Promise;
/**
* Leaves the room and closes all established peer connections
* @method leave
*/
leave(): void;
/**
* Cleans up all resources used by the room.
* @method leave
*/
destroy(): void;
/**
* Creates a remote peer. Overwrite to use your own class for peers.
* @private
* @method create_peer
* @param {rtc.PeerConnection} pc The PeerConnection to the peer
* @param {rtc.SignalingPeer} signaling_peer The signaling connection to the peer
*/
createPeer(pc: PeerConnection, signaling_peer: SP): RemotePeer;
private setState;
}