import Logger from '../util/logger';
import type { IdGeneratorInterface } from '../util/id';
import type { WampDict } from '../types/messages/MessageTypes';
import type { WampMessage } from '../types/Protocol';
export declare type MessageSender = (msg: WampMessage) => Promise<void>;
export declare type ProtocolViolator = (msg: string) => void;
export declare type IdGenerators = {
    global: IdGeneratorInterface;
    session: IdGeneratorInterface;
};
export interface ProcessorInterface {
    processMessage(msg: WampMessage): boolean;
    close(): void;
}
export interface ProcessorFactoryInterface {
    new (sender: MessageSender, violator: ProtocolViolator, idGenerators: IdGenerators, logger: Logger): ProcessorInterface;
    getFeatures(): WampDict;
}
declare abstract class AbstractProcessor implements ProcessorInterface {
    protected sender: MessageSender;
    protected violator: ProtocolViolator;
    protected idGenerators: IdGenerators;
    protected logger: Logger;
    protected _closed: boolean;
    constructor(sender: MessageSender, violator: ProtocolViolator, idGenerators: IdGenerators, logger: Logger);
    close(): void;
    processMessage(msg: WampMessage): boolean;
    protected abstract onClose(): void;
    protected abstract onMessage(msg: WampMessage): boolean;
}
export default AbstractProcessor;
