/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import EventEmitter from 'events';
import { Socket } from 'net';
import RCONParser from './parser/RCONParser';
type RconResponse = {
    size: number;
    id: number;
    type: number;
    body: string;
};
/**!
 * node-rcon
 * Copyright(c) 2012 Justin Li <j-li.net>
 * MIT Licensed
 * Stripped Down and modified by @bombitmanbomb
 */
declare class Rcon extends EventEmitter {
    host: string;
    port: number;
    password: string;
    outstandingData: Buffer | null;
    hasAuthed: boolean;
    protected _tcpSocket: Socket;
    constructor(host: string, port: number, password: string);
    _sendSocket(buf: Buffer): void;
    connect(): void;
    send(data: string, cmd: number, id?: number): void;
    disconnect(): void;
    setTimeout(timeout: number, callback: () => unknown): void;
    _tcpSocketOnData(data: Buffer): boolean | void;
    socketOnConnect(): void;
    socketOnEnd(): void;
}
type ResponsePromiseQueueObject = {
    time: Date;
    buffer: string;
    handled: boolean;
    resolve: (data: unknown) => void;
    reject: (reason: unknown) => void;
    timeOut: NodeJS.Timeout;
};
type ECOOptions = {
    disableAutoStatus: boolean;
};
/**
 * Primary Interface Object for ECO servers.
 */
export default class ECO {
    /**
     * Rejects if an error occurs when connecting.
     */
    onReady: Promise<null>;
    rconParser: RCONParser;
    protected messageID: number;
    protected _conn: Rcon;
    protected _isAuthorized: boolean;
    protected _responsePromiseQueue: Map<number, ResponsePromiseQueueObject>;
    debug: boolean;
    /**Reconnect to the client */
    reconnect: () => Promise<unknown>;
    _events: EventEmitter;
    constructor(ip: string, port: number, password: string, options?: ECOOptions);
    on(event: 'READY', cb: () => void): EventEmitter;
    removeListener(event: Parameters<EventEmitter['removeListener']>[0], cb: Parameters<EventEmitter['removeListener']>[1]): EventEmitter;
    /**
     * Send a Raw RCON command.
     */
    send(cmd: string): Promise<unknown>;
    protected _onResponse(response: RconResponse): void;
    /**
     * Disconnect the client.
     */
    disconnect(): void;
    protected _parseResponse(res: string): unknown;
    protected _onError(err: string): void;
    protected onEnd(): void;
}
export {};
