/// <reference types="node" />
import { EventEmitter } from 'events';
import { AddressInfo } from 'net';
import { Listener, ReceiverSettings } from './types/types';
import type { IecType } from 'iec-61131-3';
export declare class Receiver extends EventEmitter {
    private debug;
    private debugD;
    private debugIO;
    /**
     * Active debug level
     *  - 0 = no debugging
     *  - 1 = basic debugging (same as $env:DEBUG='codesys-client-receiver')
     *  - 2 = detailed debugging (same as $env:DEBUG='codesys-client-receiver,codesys-client-receiver:details')
     *  - 3 = full debugging (same as $env:DEBUG='codesys-client-receiver,codesys-client-receiver:details,codesys-client-receiver:raw-data')
     */
    debugLevel: number;
    /**
     * Active settings
     */
    settings: ReceiverSettings;
    /**
     * Socket instance
     */
    private socket?;
    /**
     * Buffer for each list ID of incomplete packets
     * (data is still coming up)
     */
    private packetBuffer;
    /**
     * Array handlers added by user
     */
    handlers: Listener[];
    /**
     * Constructor
     *
     * @param settings Settings object
     */
    constructor(settings?: ReceiverSettings);
    /**
     * Sets debugging using debug package on/off.
     * Another way for environment variable DEBUG:
     *  - 0 = no debugging
     *  - 1 = basic debugging (same as $env:DEBUG='codesys-client-receiver')
     *  - 2 = detailed debugging (same as $env:DEBUG='codesys-client-receiver,codesys-client-receiver:details')
     *  - 3 = full debugging (same as $env:DEBUG='codesys-client-receiver,codesys-client-receiver:details,codesys-client-receiver:raw-data')
     *
     * @param level 0 = none, 1 = basic, 2 = detailed, 3 = detailed + raw data
     */
    setDebugging(level: number): void;
    /**
     * Starts listening for incoming data from
     * the UDP port (and interface) provided in settings
     */
    listen(): Promise<AddressInfo>;
    /**
     * Stops listening for incoming data
     */
    close(): Promise<void>;
    /**
     * Adds a new data handler callback for incoming data.
     * Callback is called with received data if listID matches
     *
     * @param listID List ID ("Listidentifier") of the network variable list (NVL)
     * @param dataType IEC-61131-3 data type schema of the provided data (like iec.INT, iec.STRUCT, etc.)
     * @param callback Callback to be called when data is received
     * @returns
     */
    addHandler<T>(listID: number, dataType: IecType, callback: (data: T, listener: Listener) => void): Listener;
    /**
     * Removes the given handler from handler list
     * and stops calling its callback
     * @param handler Handler to be removed - created previously with addHandler()
     */
    removeHandler(handler: Listener): void;
    /**
     * Removes all registered handlers
     */
    removeAllHandlers(): void;
    /**
     * Callback for socket errors
     * @param err
     */
    private handleSocketError;
    /**
     * Handles received data from socket
     *
     * @param data
     * @param info
     */
    private handleReceivedData;
    /**
     * Parses received from byte buffer to object
     * @param data
     */
    private parseReceivedPacket;
    /**
     * Parses header from received data
     * @param data
     * @returns
     */
    private parseReceivedPacketHeader;
    /**
     * Parses header flags as string from bits
     * @param flags
     * @returns
     */
    private parseHeaderFlags;
    /**
     * Handles received packet and adds to packet buffer
     * @param packet
     */
    private handleReceivedPacket;
    /**
     * Checks if received packets are fully received
     * @param index
     * @param buffer
     */
    private checkReceivedPacket;
    /**
     * Combines all received packets to one single packet
     * @param buffer
     * @returns
     */
    private convertBufferEntriesToPacket;
}
