@skyway-sdk/core
Version:
The official Next Generation JavaScript SDK for SkyWay
248 lines • 10.9 kB
TypeScript
import type { Event } from '@skyway-sdk/common';
import type model from '@skyway-sdk/model';
import type { ChannelImpl, ChannelInit, ChannelQuery, MemberInit, PublicationInit } from '@skyway-sdk/rtc-api-client';
import type { LocalMemberConfig, MemberInternalConfig } from '../config';
import type { SkyWayContext } from '../context';
import type { Member, MemberImpl } from '../member';
import { type LocalPerson, type LocalPersonImpl } from '../member/localPerson';
import type { RemoteMember } from '../member/remoteMember';
import type { Publication, PublicationImpl } from '../publication';
import type { Subscription, SubscriptionImpl } from '../subscription';
import type { ChannelClosedEvent, ChannelMetadataUpdatedEvent, ListChangedEvent, MemberJoinedEvent, MemberLeftEvent, MemberMetadataUpdatedEvent, PublicationDisabledEvent, PublicationEnabledEvent, PublicationMetadataUpdatedEvent, StreamPublishedEvent, StreamSubscribedEvent, StreamUnpublishedEvent, StreamUnsubscribedEvent } from './event';
export type { ChannelInit, ChannelQuery, MemberInit };
export interface Channel {
readonly id: string;
readonly name?: string;
readonly appId: string;
metadata?: string;
state: ChannelState;
/**
* @description [japanese] このChannelが閉じられた時に発生するイベント
*/
readonly onClosed: Event<ChannelClosedEvent>;
/**
* @description [japanese] このChannelのMetadataが更新された時に発生するイベント
*/
readonly onMetadataUpdated: Event<ChannelMetadataUpdatedEvent>;
/**@description [japanese] このChannelのMemberの数が変化した時に発生するイベント */
readonly onMemberListChanged: Event<ListChangedEvent>;
/**
* @description [japanese] ChannelにMemberが参加した時に発生するイベント
*/
readonly onMemberJoined: Event<MemberJoinedEvent>;
/**
* @description [japanese] ChannelからMemberが退出した時に発生するイベント
*/
readonly onMemberLeft: Event<MemberLeftEvent>;
/**
* @description [japanese] MemberのMetadataが更新された時に発生するイベント
*/
readonly onMemberMetadataUpdated: Event<MemberMetadataUpdatedEvent>;
/**
* @description [japanese] ChannelにStreamがPublishされた時に発生するイベント
*/
readonly onStreamPublished: Event<StreamPublishedEvent>;
/**
* @description [japanese] ChannelからStreamがUnpublishされた時に発生するイベント
*/
readonly onStreamUnpublished: Event<StreamUnpublishedEvent>;
/**@description [japanese] このChannelのPublicationの数が変化した時に発生するイベント */
readonly onPublicationListChanged: Event<ListChangedEvent>;
/**
* @description [japanese] StreamのPublicationのMetadataが更新された時に発生するイベント
*/
readonly onPublicationMetadataUpdated: Event<PublicationMetadataUpdatedEvent>;
/**@description [japanese] このChannelのPublicationが有効化された時に発生するイベント */
readonly onPublicationEnabled: Event<PublicationEnabledEvent>;
/**@description [japanese] このChannelのPublicationが無効化された時に発生するイベント */
readonly onPublicationDisabled: Event<PublicationDisabledEvent>;
/**
* @description [japanese] ChannelのPublicationがSubscribeされた時に発生するイベント
*/
readonly onPublicationSubscribed: Event<StreamSubscribedEvent>;
/**
* @description [japanese] ChannelのPublicationがUnsubscribeされた時に発生するイベント
*/
readonly onPublicationUnsubscribed: Event<StreamUnsubscribedEvent>;
/**@description [japanese] このChannelのSubscriptionの数が変化した時に発生するイベント */
readonly onSubscriptionListChanged: Event<ListChangedEvent>;
/**
* @description [japanese] Channel中のMemberの一覧を取得する
*/
members: Member[];
/**
* @description [japanese] Channel中のLocalPersonを取得する
*/
localPerson?: LocalPerson;
/**
* @description [japanese] Channel中のBotの一覧を取得する
*/
bots: RemoteMember[];
/**
* @description [japanese] Channel中のPublicationの一覧を取得する
*/
publications: Publication[];
/**
* @description [japanese] Channel中のSubscriptionの一覧を取得する
*/
subscriptions: Subscription[];
/**
* @description [japanese] ChannelにMemberを追加する
*/
join: (memberInit?: {
name?: MemberInit['name'];
metadata?: MemberInit['metadata'];
} & Partial<LocalMemberConfig>) => Promise<LocalPerson>;
/**
* @description [japanese] ChannelからMemberを退出させる
*/
leave: (member: Member) => Promise<void>;
/**
* @description [japanese] ChannelのMetadataを更新する
*/
updateMetadata: (metadata: string) => Promise<void>;
/**
* @description [japanese] Channelを閉じる。
*/
close: () => Promise<void>;
/**
* @description [japanese] Channelを閉じずにChannelインスタンスの利用を終了し次のリソースを解放する。
* - サーバとの通信
* - イベントリスナー
* - LocalPersonのインスタンス
*/
dispose: () => void;
}
/**@internal */
export declare class SkyWayChannelImpl implements Channel {
/**@private */
readonly _context: SkyWayContext;
/**@private */
private readonly _channelImpl;
readonly id: model.Channel['id'];
readonly name: model.Channel['name'];
readonly appId: string;
_localPerson?: LocalPersonImpl;
disposed: boolean;
readonly config: import("../config").ContextConfig;
private _state;
private readonly _api;
private _members;
/**@private */
_getMember: (id: string) => MemberImpl;
private _addLocalPerson;
private _addRemoteMember;
private _removeMember;
private _publications;
/**@private */
_getPublication: (id: string) => PublicationImpl<import("..").LocalStream>;
/**@private */
_addPublication(p: model.Publication): PublicationImpl<import("..").LocalStream>;
private _removePublication;
private _subscriptions;
/**@private */
_getSubscription: (id: string) => SubscriptionImpl<import("..").RemoteStream>;
/**@private */
_addSubscription(s: model.Subscription): SubscriptionImpl<import("..").RemoteStream>;
private _removeSubscription;
private readonly _events;
readonly onClosed: Event<ChannelClosedEvent>;
readonly onMetadataUpdated: Event<ChannelMetadataUpdatedEvent>;
readonly onMemberListChanged: Event<ListChangedEvent>;
readonly onMemberJoined: Event<MemberJoinedEvent>;
readonly onMemberLeft: Event<MemberLeftEvent>;
readonly onMemberMetadataUpdated: Event<MemberMetadataUpdatedEvent>;
readonly onPublicationListChanged: Event<ListChangedEvent>;
readonly onStreamPublished: Event<StreamPublishedEvent>;
readonly onStreamUnpublished: Event<StreamUnpublishedEvent>;
readonly onPublicationMetadataUpdated: Event<PublicationMetadataUpdatedEvent>;
readonly onPublicationEnabled: Event<PublicationEnabledEvent>;
readonly onPublicationDisabled: Event<PublicationDisabledEvent>;
readonly onSubscriptionListChanged: Event<ListChangedEvent>;
readonly onPublicationSubscribed: Event<StreamSubscribedEvent>;
readonly onPublicationUnsubscribed: Event<StreamUnsubscribedEvent>;
/**@private */
readonly _onDisposed: Event<void>;
constructor(
/**@private */
_context: SkyWayContext,
/**@private */
_channelImpl: ChannelImpl);
get localPerson(): LocalPersonImpl | undefined;
get members(): MemberImpl[];
get bots(): RemoteMember[];
get publications(): Publication[];
get subscriptions(): Subscription[];
get metadata(): string | undefined;
get state(): ChannelState;
toJSON(): {
id: string;
name: string;
appId: string;
metadata: string | undefined;
members: MemberImpl[];
publications: Publication<import("..").LocalStream>[];
subscriptions: Subscription<import("..").RemoteStream>[];
};
private _setupPropertiesFromChannel;
private _setupListenChannelEvent;
private _handleOnChannelClose;
private _handleOnChannelMetadataUpdate;
private _handleOnMemberJoin;
private _handleOnMemberLeft;
private _handleOnMemberMetadataUpdate;
private _handleOnStreamPublish;
private _handleOnStreamUnpublish;
private _handleOnPublicationMetadataUpdate;
private _handleOnPublicationEnabled;
private _handleOnPublicationDisabled;
private _handleOnStreamSubscribe;
private _handleOnStreamUnsubscribe;
join(options?: PersonInit): Promise<LocalPerson>;
readonly leave: (member: Member) => Promise<void>;
readonly updateMetadata: (metadata: string) => Promise<void>;
readonly close: () => Promise<void>;
/**@private */
readonly _updateMemberTtl: (memberId: string, ttlSec: number) => Promise<void>;
/**@private */
readonly _updateMemberMetadata: (memberId: string, metadata: string) => Promise<void>;
/**@private */
/**@throws {SkyWayError} */
readonly _publish: (init: PublicationInit) => Promise<model.Publication>;
/**@private */
readonly _unpublish: (publicationId: string) => Promise<void>;
/**@private
* @throws {@link SkyWayError}
*/
readonly _subscribe: (subscriberId: string, publicationId: string) => Promise<model.Subscription>;
/**@private */
readonly _unsubscribe: (subscriptionId: string) => Promise<void>;
/**@private */
readonly _updatePublicationMetadata: (publicationId: string, metadata: string) => Promise<void>;
/**@private */
readonly _disablePublication: (publicationId: string) => Promise<void>;
/**@private */
readonly _enablePublication: (publicationId: string) => Promise<void>;
dispose(): void;
}
export declare class SkyWayChannel {
/**
* @description [japanese] Channelの作成
*/
static Create(context: SkyWayContext, init?: ChannelInit): Promise<Channel>;
/**
* @description [japanese] 既存のChannelの取得
*/
static Find(context: SkyWayContext, query: ChannelQuery): Promise<Channel>;
/**
* @description [japanese] Channelの取得を試み、存在しなければ作成する
*/
static FindOrCreate(context: SkyWayContext, query: ChannelInit): Promise<Channel>;
private constructor();
}
export declare type ChannelState = 'opened' | 'closed';
export declare type PersonInit = {
name?: MemberInit['name'];
metadata?: MemberInit['metadata'];
} & Partial<LocalMemberConfig> & MemberInternalConfig;
//# sourceMappingURL=index.d.ts.map