import { NegotiationParams } from './negotiation-params';
/**
 * トランスポートの名前です。
 * @category Enum
 * @enum
 */
export declare const TRANSPORT_NAME: {
    /** WebSocket。 */
    readonly WEBSOCKET: "WebSocket";
    /** WebTransport。 */
    readonly WEB_TRANSPORT: "WebTransport";
};
/**
 * {@link TRANSPORT_NAME}の型です。
 * @category Enum
 */
export type TransportName = (typeof TRANSPORT_NAME)[keyof typeof TRANSPORT_NAME];
/**
 * iSCPメッセージのWriterインターフェースです。
 */
export interface Writer {
    /**
     * iSCPの1メッセージ分を書き込みます。
     * @param message 1メッセージ
     */
    write(message: Uint8Array): Promise<void>;
}
/**
 * iSCPメッセージのReaderインターフェースです。
 */
export interface Reader {
    /**
     * iSCPの1メッセージ分を読み込みます。
     * @returns 1メッセージ
     */
    read(): Promise<Uint8Array>;
}
/**
 * iSCPのトランスポートインターフェースです。
 * @category Connector
 */
export interface Transport extends Reader, Writer {
    /**
     * トランスポートを切断します。
     */
    close(): Promise<void>;
    /**
     * ネゴシエーションパラメータを取得します。
     * @returns ネゴシエーションパラメータ
     */
    get negotiationParams(): NegotiationParams;
    /**
     * アドレスを取得します。
     * @returns アドレス
     */
    get address(): string;
    /**
     * トランスポートの名前を取得します。
     * @returns トランスポートの名前
     */
    get name(): TransportName;
}
/**
 * @todo Unreliable のインターフェースの説明をする
 */
export declare abstract class Unreliable {
    abstract getUnreliable(): {
        reader: Reader;
        writer: Writer;
    };
}
/**
 * iSCPコネクターのインターフェースです。
 * @category Connector
 */
export interface Connector {
    /**
     * iSCPを使って接続します。
     * @param {string} address 接続先のアドレス。`127.0.0.1:8080` 形式。
     * @param {NegotiationParams} negotiationParams ネゴシエーションパラメータ。
     * @returns {Transport} iSCPのトランスポート。
     */
    connect(address: string, negotiationParams: NegotiationParams): Promise<Transport>;
}
