import { BindOptions, RemoteInfo, Socket } from 'node:dgram';
import type { AddressInfo } from 'net';
import { EventEmitter } from 'events';
import { VBANPacket, VBANPacketTypes } from './packets/index.js';
import { IVBANServerOptions } from './IVBANServerOptions.js';
export interface VBANServerEvents {
    listening: () => void;
    error: (err: Error) => void;
    close: () => void;
    message: (packet: VBANPacketTypes, sender: RemoteInfo) => void;
}
export declare interface VBANServer {
    on<U extends keyof VBANServerEvents>(event: U, listener: VBANServerEvents[U]): this;
    emit<U extends keyof VBANServerEvents>(event: U, ...args: Parameters<VBANServerEvents[U]>): boolean;
}
export declare class VBANServer extends EventEmitter {
    readonly UDPServer: Socket;
    private readonly options;
    private readonly frameCounter;
    isListening: boolean;
    constructor(options?: IVBANServerOptions);
    address(): AddressInfo;
    bind(port?: number, address?: string): Promise<void>;
    bind(port?: number): Promise<void>;
    bind(): Promise<void>;
    bind(options: BindOptions): Promise<void>;
    private getFrameCounter;
    send(packet: VBANPacket, port: number, address: string): Promise<void>;
    sendPing(receiver: {
        address: string;
        port: number;
    }, isReply?: boolean): Promise<void>;
    private readonly messageHandler;
    close(): Promise<void>;
}
