import { RaftAppendEntriesRequestChunk, RaftAppendEntriesResponse } from './messagetypes/RaftAppendEntries';
import { RaftVoteRequest, RaftVoteResponse } from './messagetypes/RaftVote';
import { HamokMessage } from './HamokMessage';
import EventEmitter from 'events';
type Input = RaftVoteRequest | RaftVoteResponse | RaftAppendEntriesRequestChunk | RaftAppendEntriesResponse;
type EventMap = {
    message: [message: HamokMessage];
    RaftVoteRequest: [request: RaftVoteRequest];
    RaftVoteResponse: [response: RaftVoteResponse];
    RaftAppendEntriesRequestChunk: [request: RaftAppendEntriesRequestChunk];
    RaftAppendEntriesResponse: [response: RaftAppendEntriesResponse];
};
export declare interface RaftMessageEmitter {
    on<U extends keyof EventMap>(event: U, listener: (...args: EventMap[U]) => void): this;
    once<U extends keyof EventMap>(event: U, listener: (...args: EventMap[U]) => void): this;
    off<U extends keyof EventMap>(event: U, listener: (...args: EventMap[U]) => void): this;
    emit<U extends keyof EventMap>(event: U, ...args: EventMap[U]): boolean;
}
export declare class RaftMessageEmitter extends EventEmitter {
    constructor();
    send(input: Input): void;
    receive(message: HamokMessage): void;
    encodeRaftVoteRequest(request: RaftVoteRequest): HamokMessage;
    decodeRaftVoteRequest(message: HamokMessage): RaftVoteRequest;
    encodeRaftVoteResponse(response: RaftVoteResponse): HamokMessage;
    decodeRaftVoteResponse(message: HamokMessage): RaftVoteResponse;
    encodeRaftAppendEntriesRequest(request: RaftAppendEntriesRequestChunk): HamokMessage;
    decodeRaftAppendEntriesRequest(message: HamokMessage): RaftAppendEntriesRequestChunk;
    encodeRaftAppendEntriesResponse(response: RaftAppendEntriesResponse): HamokMessage;
    decodeRaftAppendEntriesResponse(message: HamokMessage): RaftAppendEntriesResponse;
}
export {};
//# sourceMappingURL=RaftMessageEmitter.d.ts.map