import { BlockData, BlockType } from './Block';
import { DisconnectReason } from './Commander';
import { Logger } from './Logger';
import { Connection } from './Connection';
export declare enum ProtocolState {
    Start = 0,
    Handshake = 1,
    Work = 2,
    Closed = 3
}
export declare class Protocol {
    private connection;
    private log;
    onBlock: (block: BlockData) => void;
    onDisconnect: () => void;
    private transport;
    private state;
    constructor(connection: Connection, log: Logger);
    dispatch(type: BlockType, body?: Buffer): void;
    send(body: Buffer): void;
    heartbeat(): void;
    handshake(body: Buffer): void;
    acknowledge(body: Buffer): void;
    kick(reason: DisconnectReason): void;
    disconnect(): void;
    onClose(): void;
    private onData;
    private catchBlockForState;
    destroy(): void;
}
