import * as WebSocket from "ws";
import { Configuration } from "../../../configuration";
import { EventFired } from "../../../HandleEvent";
import { AutomationContextAware, HandlerContext } from "../../../HandlerContext";
import { HandlerResult } from "../../../HandlerResult";
import { AutomationEventListener } from "../../../server/AutomationEventListener";
import { AutomationServer } from "../../../server/AutomationServer";
import { GraphClient } from "../../../spi/graph/GraphClient";
import { MessageClient } from "../../../spi/message/MessageClient";
import { CommandInvocation } from "../../invoker/Payload";
import { AbstractRequestProcessor } from "../AbstractRequestProcessor";
import { CommandIncoming, EventIncoming } from "../RequestProcessor";
import { RegistrationConfirmation, WebSocketRequestProcessor } from "../websocket/WebSocketRequestProcessor";
/**
 * A RequestProcessor that delegates to Node.JS Cluster workers to do the actual
 * command and event processing.
 * @see ClusterWorkerRequestProcessor
 */
export declare class ClusterMasterRequestProcessor extends AbstractRequestProcessor implements WebSocketRequestProcessor {
    protected automations: AutomationServer;
    protected configuration: Configuration;
    protected listeners: AutomationEventListener[];
    protected numWorkers: number;
    protected maxConcurrentPerWorker: number;
    private registration?;
    private readonly webSocketLifecycle;
    private readonly commands;
    private readonly events;
    private readonly messages;
    private shutdownInitiated;
    private replaceWorkers;
    private backoffInitiated;
    constructor(automations: AutomationServer, configuration: Configuration, listeners?: AutomationEventListener[], numWorkers?: number, maxConcurrentPerWorker?: number);
    onRegistration(registration: RegistrationConfirmation): void;
    onConnect(ws: WebSocket): void;
    onDisconnect(): void;
    run(): Promise<any>;
    protected invokeCommand(ci: CommandInvocation, ctx: HandlerContext & AutomationContextAware, command: CommandIncoming, callback: (result: Promise<HandlerResult>) => void): void;
    protected invokeEvent(ef: EventFired<any>, ctx: HandlerContext & AutomationContextAware, event: EventIncoming, callback: (results: Promise<HandlerResult[]>) => void): void;
    protected sendStatusMessage(payload: any, ctx: HandlerContext & AutomationContextAware): Promise<any>;
    protected createGraphClient(event: CommandIncoming | EventIncoming): GraphClient;
    protected createMessageClient(event: CommandIncoming | EventIncoming): MessageClient;
    private assignWorker;
    private startMessage;
    private queueLength;
    private scheduleQueueLength;
    private scheduleBackoffCheck;
    private reportQueueLength;
    private terminateWorkers;
}
//# sourceMappingURL=ClusterMasterRequestProcessor.d.ts.map