import { DataBus } from '@cross-border-bridge/data-bus';
/**
 * DataChannel内部エラー
 */
export declare class DataChannelError extends Error {
    /**
     * エラータイプ。以下の文字列が入る
     *  - Unspecified : 不明なエラー
     *  - Timeout     : メッセージがタイムアウトした
     *  - Closed      : メッセージのレスポンスを受け取る前にDataChannelがクローズした
     */
    type: string;
}
export declare type DataChannelCallback = (error: DataChannelError, packet: any) => void;
export declare type DataChannelResponseCallback = (packet: any) => void;
export declare type DataChannelHandler = (packet: any, callback?: DataChannelResponseCallback) => boolean | void;
/**
 * DataBus上で単純なリクエスト＆レスポンス機構を提供する。
 */
export declare class DataChannel {
    private _identifier;
    private _dataBus;
    private _handler;
    private _handlers;
    private _tagCount;
    private _waitingCallbacks;
    private _timeoutObjects;
    constructor(dataBus: DataBus);
    /**
     * DataChannelを破棄する際に実行する。
     * このメソッドを実行するとすべてのハンドラが解放され、レスポンス待ちの処理についてはエラーが返る。
     */
    destroy(): void;
    /**
     * このDataChannelが既に破棄されたかどうかを返す
     *
     * @return 破棄されていればtrue、されていなければfalse
     */
    destroyed(): boolean;
    /**
     * メッセージハンドラの登録を行う
     *
     * @param handler メッセージ受信時に実行されるハンドラ
     * @return ハンドラID
     */
    addHandler(handler: DataChannelHandler): void;
    /**
     * メッセージハンドラの解除を行う
     *
     * @param handlerId ハンドラ登録時に取得したハンドラID
     */
    removeHandler(handler: DataChannelHandler): void;
    /**
     * 登録されているすべてのメッセージハンドラの解除を行う
     */
    removeAllHandlers(): void;
    /**
     * メッセージの送信を行う。
     *
     * @param packet メッセージの実データ。フォーマットによって内容は自由に定義できる
     * @param callback メッセージに対してのレスポンスを受け取るコールバック。任意指定
     * @param timeout レスポンスを待つ待機時間。待機時間を過ぎるとcallbackにtimeoutエラーが返る。未指定時はタイムアウトしない。
     */
    send(packet: any, callback: DataChannelCallback, timeout?: number): void;
    private register();
    private unregister();
    private processCallback(targetTag, error, packet?);
    private acquireTag();
}
