UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

239 lines (238 loc) 8.89 kB
import { DownstreamChunkAckComplete, DownstreamChunk as Message$DownstreamChunk, DownstreamMetadata as Message$DownstreamMetadata, DataId, QoS, DownstreamFilter, DownstreamChunkAck, DownstreamResumeRequest, DownstreamResumeResponse, DownstreamCloseRequest, DownstreamCloseResponse, DownstreamMetadataAck } from './message'; import { EventListenerOptions, DownstreamChunk as Model$DownstreamChunk, DownstreamMetadata as Model$DownstreamMetadata, DownstreamState } from './model'; import { Sequence } from './sequence'; import { Logger } from './logger'; export interface DownstreamConfig { logger: Logger; id: string; idAlias: number; serverTime: bigint; qos: QoS; expiryInterval: number; filters: DownstreamFilter[]; dataIdAliases?: Record<number, DataId>; dataIdAliasSequence?: Sequence; ackInterval: number; omitEmptyChunk: boolean; resumeRequester: (request: DownstreamResumeRequest) => Promise<DownstreamResumeResponse>; closeRequester: (request: DownstreamCloseRequest) => Promise<DownstreamCloseResponse>; chunkAckSender: (message: DownstreamChunkAck) => Promise<void>; metadataAckSender: (message: DownstreamMetadataAck) => Promise<void>; chunkIterator: AsyncIterableIterator<Message$DownstreamChunk>; chunkAckCompleteIterator: AsyncIterableIterator<DownstreamChunkAckComplete>; metadataIterator: AsyncIterableIterator<Message$DownstreamMetadata>; reopenIterator: AsyncIterableIterator<void>; } type DownstreamEvent = typeof Downstream.EVENT; /** * ダウンストリームを閉じた時のイベントです。 * @category Downstream */ export declare class DownstreamClosedEvent { /** ダウンストリームの状態。 */ state: DownstreamState; /** 内部エラーが発生した場合の例外。 */ error?: Error; constructor(init: { state: DownstreamClosedEvent['state']; error: DownstreamClosedEvent['error']; }); } /** * {@link DownstreamChunk}を取得するイベントリスナーです。 * {@link Downstream}の{@link Downstream.addEventListener}、{@link Downstream.removeEventListener}で指定します。 * @category Downstream */ export type DownstreamChunkEventListener = (chunk: Model$DownstreamChunk) => void; /** * {@link DownstreamMetadata}を取得するイベントリスナーです。 * {@link Downstream}の{@link Downstream.addEventListener}、{@link Downstream.removeEventListener}で指定します。 * @category Downstream */ export type DownstreamMetadataEventListener = (metadata: Model$DownstreamMetadata) => void; /** * {@link DownstreamClosedEvent}を取得するイベントリスナーです。 * {@link Downstream}の{@link Downstream.addEventListener}、{@link Downstream.removeEventListener}で指定します。 * @category Downstream */ export type DownstreamClosedEventListener = (event: DownstreamClosedEvent) => void; /** * ダウンストリームを表すクラスです。 * * @attention このクラスのオブジェクトは、必ず{@link Conn}の{@link Conn.openDownstream}を使用して生成してください。 * * @category Downstream * * @example * ```ts * const example = async () => { * const conn = await Conn.connect(...) * const downstream = conn.openDownstream(...) * try * // ... * finally { * await downstream.close() * } * } * ``` */ export declare class Downstream { #private; /** * @event イベント */ static EVENT: { /** ダウンストリームチャンクを受信した時に呼び出されるイベントです。 */ readonly CHUNK: "chunk"; /** ダウンストリームメタデータを受信した時に呼び出されるイベントです。 */ readonly METADATA: "metadata"; /** ダウンストリームを閉じた時に呼び出されるイベントです。 */ readonly CLOSED: "closed"; }; /** * @internal */ static start(config: DownstreamConfig): Promise<Downstream>; /** * @internal */ constructor(config: DownstreamConfig); /** * ストリームIDを取得します。 * @returns ストリームID */ get id(): string; /** * ダウンストリームを開いた時のサーバー時刻(ナノ秒)を取得します。 * @returns ダウンストリームを開いた時のサーバー時刻(ナノ秒) */ get serverTime(): bigint; /** * 有効期限を取得します。 * @returns ストリームの有効期限(秒) */ get expiryInterval(): number; /** * QoSを取得します。 * @returns QoS */ get qos(): QoS; /** * Ack返却間隔(秒)を取得します。 * @returns Ack返却間隔(秒) */ get ackInterval(): number; /** * 空チャンク省略フラグを取得します。 */ get omitEmptyChunk(): boolean; /** * ダウンストリームフィルタのリストを取得します。 * @returns ダウンストリームフィルタのリスト */ get filters(): DownstreamFilter[]; /** * ストリームの状態を取得します。 * @returns ダウンストリームの状態 */ get state(): DownstreamState; /** * ダウンストリームが閉じるまで待機します。 */ waitClosed(): Promise<void>; /** * ダウンストリームを閉じます。 */ close(): Promise<void>; /** * {@link Downstream.EVENT}.CHUNKのイベントリスナーを追加します。 * ダウンストリームチャンクを受信した時にイベントリスナーが呼び出されます。 * * @example * ```ts * downstream.addEventListener(Downstream.EVENT.CHUNK, (chunk: DownstreamChunk) => { * ... * }) * ``` */ addEventListener(name: DownstreamEvent['CHUNK'], listener: DownstreamChunkEventListener, options?: EventListenerOptions): void; /** * {@link Downstream.EVENT}.METADATAのイベントリスナーを追加します。 * ダウンストリームメタデータを受信した時にイベントリスナーが呼び出されます。 * * @example * ```ts * downstream.addEventListener(Downstream.EVENT.METADATA, (metadata: DownstreamMetadata) => { * ... * }) * ``` */ addEventListener(name: DownstreamEvent['METADATA'], listener: DownstreamMetadataEventListener, options?: EventListenerOptions): void; /** * {@link Downstream.EVENT}.CLOSEDのイベントリスナーを追加します。 * ダウンストリームを閉じた時にイベントリスナーが呼び出されます。 * * @example * ```ts * downstream.addEventListener(Downstream.EVENT.CLOSED, (state) => { * ... * }) * ``` */ addEventListener(name: DownstreamEvent['CLOSED'], listener: DownstreamClosedEventListener, options?: EventListenerOptions): void; /** * {@link Downstream.EVENT}.CHUNKのイベントリスナーを削除します。 * {@link addEventListener}で指定したイベントリスナーを指定してください。 * * @example * ```ts * const listener = (chunk: DownstreamChunk) => { * ... * } * * downstream.addEventListener(Downstream.EVENT.CHUNK, listener) * * ... * * downstream.removeEventListener(Downstream.EVENT.CHUNK, listener) * ``` */ removeEventListener(name: DownstreamEvent['CHUNK'], listener: DownstreamChunkEventListener): void; /** * {@link Downstream.EVENT}.METADATAのイベントリスナーを削除します。 * {@link addEventListener}で指定したイベントリスナーを指定してください。 * * @example * ```ts * const listener = (metadata: DownstreamMetadata) => { * ... * } * * downstream.addEventListener(Downstream.EVENT.METADATA, listener) * * ... * * downstream.removeEventListener(Downstream.EVENT.METADATA, listener) * ``` */ removeEventListener(name: DownstreamEvent['METADATA'], listener: DownstreamMetadataEventListener): void; /** * {@link Downstream.EVENT}.CLOSEDのイベントリスナーを削除します。 * {@link addEventListener}で指定したイベントリスナーを指定してください。 * * @example * ```ts * const listener = (closedEvent: DownstreamClosedEvent) => { * ... * } * * downstream.addEventListener(Downstream.EVENT.CLOSED, listener) * * ... * * downstream.removeEventListener(Downstream.EVENT.CLOSED, listener) * ``` */ removeEventListener(name: DownstreamEvent['CLOSED'], listener: DownstreamClosedEventListener): void; } export {};