import { Nullable } from "../types";
export declare abstract class Actor {
    processMessage(msg: Message): void;
    processSend(send: Send): void;
    processReply(_reply: Reply): void;
}
export declare abstract class Message {
    private static counter;
    readonly uuid: number;
    readonly name: string;
    readonly isReply: boolean;
    readonly source: Actor;
    readonly target: Actor;
    sourceData: any;
    payload: any;
    label: string;
    constructor(name: string, source: Actor, target: Actor);
}
declare abstract class ForwardableBase<T> extends Message {
    private _rootMessage;
    private _spawnedFrom;
    get spawnedFrom(): Nullable<this>;
    protected setSpawnedFrom(msg: Nullable<this>): void;
    get rootMessage(): this;
}
export declare class Reply extends ForwardableBase<Reply> {
    readonly isReply = true;
    responseTo: Send;
    isError: boolean;
    error?: any;
    constructor(responseTo: Send, error?: any);
    spawn(responseTo: Send, error?: any): Reply;
}
export declare class Send extends ForwardableBase<Send> {
    readonly isReply = false;
    children: Send[];
    reply: Nullable<Reply>;
    cancelledAt: Nullable<number>;
    spawn(nextTarget: Actor): Send;
    spawnReply(error?: any): Reply;
}
export {};
