import { IControlFmod } from '../ports/i-control-fmod';
import { TypedEmitter } from 'tiny-typed-emitter';
import { ILogger } from './i-logger';
import { ConnectionEvents, IConnect, IConnectEvents } from '../ports/i-connect';
import { IConfigureLogging } from '../ports/i-configure-logging';
export declare enum ConnectionState {
    Disconnected = "Disconnected",
    Connecting = "Connecting",
    Connected = "Connected",
    Disconnecting = "Disconnecting"
}
export interface FmodZeromqApiArgs {
    logger?: ILogger;
    heartbeatIntervalMillis?: number;
    socketStatusIntervalMillis?: number;
}
export declare class FmodZeromqApi extends TypedEmitter<ConnectionEvents> implements IControlFmod, IConnect, IConnectEvents, IConfigureLogging {
    private readonly _socketStatusInterval;
    private _socketStatusPoll;
    private readonly _heartbeatInterval;
    private _heartbeatPoll;
    private _lastId;
    private _socket;
    private readonly _zmqAddress;
    private readonly _logger;
    private readonly _sm;
    private readonly _socketSempahore;
    private _verboseLogging;
    constructor(address: string, args?: FmodZeromqApiArgs);
    get connectionState(): ConnectionState;
    get verboseLogging(): boolean;
    set verboseLogging(verbose: boolean);
    connect(): void;
    disconnect(): void;
    /**
     * Start an event; it can be stopped again
     * @param event
     */
    start(event: string): Promise<void>;
    /**
     * Stop a running event
     * @param event
     */
    stop(event: string): Promise<void>;
    stopStartedEvents(): Promise<void>;
    /**
     * Play an event (fire-and-forget)
     * @param event
     */
    play(event: string): Promise<void>;
    loadBank(bankName: string): Promise<void>;
    unloadBank(bankName: string): Promise<void>;
    setParameter(eventId: string, name: string, value: number): Promise<void>;
    playVoice(eventId: string, key: string): Promise<void>;
    isPlaying(eventId: string): Promise<boolean>;
    listLoadedBankPaths(): Promise<string[]>;
    private doConnect;
    private doDisconnect;
    private sendCommand;
    private checkHeartbeat;
    private onConnecting;
    private onConnected;
    private onDisconnecting;
    private onDisconnected;
}
