import { INamedFunctions } from "./createWorkerURL";
import type { Optional } from "type-tls";
import type { Exec, ExecRecord } from "./dynamicWorkerAPI";
/**
 * 动态 Worker 给 Worker 扩展后的类型
 */
export type DWorker<W extends AbstractWorker> = W & {
    /**
     * 当前正在执行的任务数
     */
    executingCount: number;
    /**
     * Worker的名字
     */
    name: string;
    /**
     * Worker所属的 WorkerClient 的id
     */
    clientId: number;
    /**
     * Worker 本身的 id
     */
    id: number;
};
/**
 * 动态Worker 抽像基类
 *
 * @remarks
 * 动态 Worker 具备以下特点：
 *
 * - 往 Worker 中添加函数、全局变量 等
 *
 * - 调用 Worker 中的任意全局函数 或 全局变量
 *
 * - 像调用本地方法一样调用 Worker 里的方法
 *
 * - 会自动给实例自身添加快捷命令
 *
 * - 支持异步、流
 *
 * - 支持异步和流互相嵌套
 *
 * - 支持  Worker 和 SharedWorker
 */
export declare abstract class WorkerClient<W extends AbstractWorker = Worker> {
    constructor(named?: Optional<INamedFunctions>);
    /**
     * 实例的计数
     *
     * @remarks
     * 用于给每次调用生成 id
     */
    protected static instanceCount: number;
    readonly id: number;
    /**
     * Worker 的实例
     */
    abstract worker: DWorker<W>;
    /**
     * 消息端口
     */
    get port(): MessagePort;
    /**
     * 获取 Worker 和 对应的 消息端口
     */
    get workerAndPort(): [DWorker<W>, MessagePort];
    /**
     * 获取消息端口
     * @param worker
     * @returns
     */
    getPort(worker: W): MessagePort;
    /**
     * 正在执行中的任务数
     */
    abstract executingCount: number;
    /**
     * 执行已开始
     * @remarks
     * 开始执行
     */
    execStarted(worker: DWorker<W>, execRec: ExecRecord): void;
    /**
     * 执行已开始
     * @remarks
     * 开始执行
     */
    execEnded(worker: DWorker<W>): void;
    /**
     * 执行命令的计数
     *
     * @remarks
     * 用于给每次执行命令时生成 id
     */
    protected execCount: number;
    /**
     * 获取本次执行的执行 id
     * @param cmdName
     * @returns
     */
    getExecId(cmdName?: Optional<string>): string;
    /**
     * 根据调用信息生成调用记录数据
     * @param exec - 调用信息
     * @returns
     */
    getExecRecord(exec: Exec): ExecRecord;
    /**
     * 监听响应
     * @param id
     * @returns
     */
    listenResponse(id: string, worker: DWorker<W>): Promise<any>;
    /**
     * 执行 worker 中的命令
     *
     * @remarks
     * 当 worker 中成功执行，且 this 上没有对应的成员时，则会自动新增对应的成员方法
     *
     * @param exec - 命令信息
     * @param transfer - 传递给 Worker 的可传递对象。这些对象的所有权将被转移给 Worker，而发当前环境将不再保有所有权。
     * @returns
     */
    execCMD(exec: Exec, transfer?: Transferable[]): Promise<any>;
    /**
     * 往自身上添加命令成员
     * @remarks
     * 会给实例自身上添加一个执行命令的快捷命令
     *
     * @param name
     * @param isProperty - 添加到实例自身的快捷命令是否作为属性；如果是 true，则会在实例自身上生成快捷属性
     */
    setCMDToSelf(name: string, isProperty?: Optional<boolean>): boolean;
}
//# sourceMappingURL=WorkerClient.d.ts.map