import { Event } from '@skyway-sdk/common';
import { SkyWayChannelImpl } from '../../../channel';
import { SkyWayContext } from '../../../context';
import { RemoteAudioStream } from '../../../media/stream/remote/audio';
import { RemoteDataStream } from '../../../media/stream/remote/data';
import { RemoteVideoStream } from '../../../media/stream/remote/video';
import { MemberImpl } from '../../../member';
import { LocalPersonImpl } from '../../../member/localPerson';
import { Person } from '../../../member/person';
import { RemoteMemberImplInterface } from '../../../member/remoteMember';
import { Subscription } from '../../../subscription';
import { P2PConnection } from './connection';
import { PersonPlugin } from './plugin';
export declare type RemotePerson = RemoteMemberImplInterface & Person & {
    /**@description [japanese] この RemotePerson がPublicationをSubscribeしたとき */
    readonly onPublicationSubscribed: Event<{
        subscription: Subscription;
    }>;
    /**@description [japanese] この RemotePerson がPublicationをUnsubscribeしたとき */
    readonly onPublicationUnsubscribed: Event<{
        subscription: Subscription;
    }>;
    readonly onPublicationListChanged: Event<void>;
    readonly onSubscriptionListChanged: Event<void>;
    /**@description [japanese] この RemotePerson にPublicationをSubscribeさせる */
    subscribe: (publicationId: string) => Promise<{
        subscription: Subscription;
    }>;
    /**@description [japanese] この RemotePerson にPublicationをUnsubscribeさせる */
    unsubscribe: (subscriptionId: string) => Promise<void>;
};
/**@internal */
export declare class RemotePersonImpl extends MemberImpl implements RemotePerson {
    private args;
    readonly type = "person";
    readonly subtype = "person";
    readonly side = "remote";
    readonly plugin: PersonPlugin;
    private _connections;
    private _context;
    private _disposer;
    readonly onPublicationSubscribed: Event<{
        subscription: Subscription;
        stream?: RemoteDataStream | RemoteAudioStream | RemoteVideoStream | undefined;
    }>;
    readonly onPublicationUnsubscribed: Event<{
        subscription: Subscription;
    }>;
    readonly onPublicationListChanged: Event<void>;
    readonly onSubscriptionListChanged: Event<void>;
    constructor(args: {
        channel: SkyWayChannelImpl;
        name?: string;
        id: string;
        metadata?: string;
        plugin: PersonPlugin;
        context: SkyWayContext;
    });
    /**@private */
    _getConnection(localPersonId: string): P2PConnection;
    /**@private */
    _getOrCreateConnection(localPerson: LocalPersonImpl): P2PConnection;
    private _createConnection;
    subscribe: (publicationId: string) => Promise<{
        subscription: Subscription;
    }>;
    unsubscribe(subscriptionId: string): Promise<void>;
    _dispose(): void;
}
//# sourceMappingURL=member.d.ts.map