import { Serializable, SerializableInput } from '../types';
import { ClusterManager } from '../core/clusterManager';
import { ClusterClient } from '../core/clusterClient';
/** Type of the broker message sent. */
export type BrokerMessage = {
    _data: unknown;
    broker: string;
};
/** Type of the broker message handler. */
export type BrokerMessageHandler<T = unknown> = (message: T) => void;
/** The IPC Broker Abstract class. */
declare abstract class IPCBrokerAbstract {
    readonly instance: ClusterManager | ClusterClient;
    /** The listeners of the IPC Broker. */
    private listeners;
    /** Creates an instance of IPCBrokerAbstract. */
    constructor(instance: ClusterManager | ClusterClient);
    /** Listens to a specific channel. */
    listen<T>(channelName: string, callback: BrokerMessageHandler<T>): void;
    /** Handles the message received, and executes the callback. (Not meant to be used by the user.) */
    handleMessage(message: BrokerMessage): void;
}
/** IPC Broker Manager class. */
export declare class IPCBrokerManager extends IPCBrokerAbstract {
    /** Sends a message to a specific channel. */
    send<T extends Serializable>(channelName: string, message: SerializableInput<T>, clusterId?: number): Promise<void>;
}
/** IPC Broker Client class. */
export declare class IPCBrokerClient extends IPCBrokerAbstract {
    /** Sends a message to a specific channel. */
    send<T extends Serializable>(channelName: string, message: SerializableInput<T>): Promise<void>;
}
export {};
