@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
239 lines (238 loc) • 8.89 kB
TypeScript
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 {};