import model, { Channel, Member, Publication, Subscription } from '@skyway-sdk/model';
import { PublicationSummary, SubscriptionSummary } from '@skyway-sdk/rtc-rpc-api-client';
import { Config } from '../config';
import * as event from '../model/event';
import { MemberInit, PublicationInit, RtcApi, SubscriptionInit } from './api';
import { EventObserver } from './eventObserver';
export declare class ChannelImpl implements model.Channel {
    readonly appId: string;
    private eventObserver;
    private apiClient;
    private config;
    readonly id: string;
    readonly name: string;
    metadata?: string;
    members: model.Member[];
    getMember(id: string): model.Member | undefined;
    addMember(member: model.Member): model.Member;
    deleteMember(id: string): void;
    publications: model.Publication[];
    getPublication(id: string): model.Publication | undefined;
    addPublication(summary: PublicationSummary): model.Publication;
    deletePublication(publicationId: string): void;
    subscriptions: model.Subscription[];
    getSubscription(id: string): model.Subscription | undefined;
    addSubscription(summary: SubscriptionSummary): model.Subscription;
    deleteSubscription(subscriptionId: string): void;
    version: number;
    disposed: boolean;
    private readonly _events;
    readonly onClosed: import("@skyway-sdk/common").Event<event.ChannelClosedEvent>;
    readonly onMetadataUpdated: import("@skyway-sdk/common").Event<event.ChannelMetadataUpdatedEvent>;
    readonly onMemberListChanged: import("@skyway-sdk/common").Event<event.ChangedEvent>;
    readonly onMemberJoined: import("@skyway-sdk/common").Event<event.MemberJoinedEvent>;
    readonly onMemberLeft: import("@skyway-sdk/common").Event<event.MemberLeftEvent>;
    readonly onMemberMetadataUpdated: import("@skyway-sdk/common").Event<event.MemberMetadataUpdatedEvent>;
    readonly onPublicationDisabled: import("@skyway-sdk/common").Event<event.PublicationDisabledEvent>;
    readonly onPublicationEnabled: import("@skyway-sdk/common").Event<event.PublicationEnabledEvent>;
    readonly onPublicationListChanged: import("@skyway-sdk/common").Event<event.ChangedEvent>;
    readonly onStreamPublished: import("@skyway-sdk/common").Event<event.StreamPublishedEvent>;
    readonly onStreamUnpublished: import("@skyway-sdk/common").Event<event.StreamUnpublishedEvent>;
    readonly onPublicationMetadataUpdated: import("@skyway-sdk/common").Event<event.PublicationMetadataUpdatedEvent>;
    readonly onSubscriptionListChanged: import("@skyway-sdk/common").Event<event.ChangedEvent>;
    readonly onPublicationSubscribed: import("@skyway-sdk/common").Event<event.StreamSubscribedEvent>;
    readonly onPublicationUnsubscribed: import("@skyway-sdk/common").Event<event.StreamUnsubscribedEvent>;
    constructor(appId: string, { id, name, members, metadata, publications, subscriptions, version, }: model.Channel, eventObserver: EventObserver, apiClient: RtcApi, config: Config);
    private _channelClosed;
    private _channelMetadataUpdated;
    private _memberJoined;
    private _memberLeft;
    private _memberMetadataUpdated;
    private _streamPublished;
    private _streamUnpublished;
    private _publicationMetadataUpdated;
    private _publicationDisabled;
    private _publicationEnabled;
    private _streamSubscribed;
    private _streamUnsubscribed;
    updateChannelMetadata: (metadata: string) => Promise<void>;
    joinChannel(memberInit: MemberInit): Promise<model.Member>;
    leave: (channelId: Channel['id'], memberId: Member['id']) => Promise<void>;
    updateMemberTtl(memberId: Member['id'], ttlSec: number): Promise<void>;
    updateMemberMetadata: (memberId: Member['id'], metadata: string) => Promise<void>;
    /**@throws {SkyWayError} */
    publish(init: Omit<PublicationInit, 'channel'>): Promise<Publication>;
    unpublish: (publicationId: Publication['id']) => Promise<void>;
    updatePublicationMetadata: (publicationId: Publication['id'], metadata: string) => Promise<void>;
    disablePublication: (publicationId: Publication['id']) => Promise<void>;
    enablePublication: (publicationId: Publication['id']) => Promise<void>;
    /**@throws {@link SkyWayError} */
    subscribe(init: Omit<SubscriptionInit, 'channel'>): Promise<model.Subscription>;
    unsubscribe: (subscriptionId: Subscription['id']) => Promise<void>;
    close(): Promise<void>;
    /**
     * リソースの解放
     * - Channelイベントの購読停止
     * - イベントリスナー
     */
    dispose(): void;
}
export declare function channelFactory(appId: string, eventObserver: EventObserver, api: RtcApi, channelDto: Channel, config: Config): ChannelImpl;
//# sourceMappingURL=channel.d.ts.map