import { GenericObject } from '../../typings';
import BaseTransporter from './base';
import UdpServer from './tcp/udp-broadcaster';
import TcpReader from './tcp/tcp-reader';
import TcpWriter from './tcp/tcp-writer';
import Packet from '../packets';
import Transit from '../transit';
import { Registry } from '../registry';
import { Discoverer } from '../../typings/registry/discoverers';
import NodeCatalog from '../registry/catalogs/node';
import Node from '../registry/node';
import { Socket } from 'net';
import { PacketTypes } from '../../typings/packets';
export default class TcpTransporter extends BaseTransporter {
    reader: TcpReader | null;
    writer: TcpWriter | null;
    udpServer: UdpServer | null;
    gossipTimer: any;
    GOSSIP_DEBUG: boolean;
    registry: Registry | null;
    discoverer: Discoverer | null;
    nodes: NodeCatalog | null;
    constructor(options: GenericObject);
    init(transit: Transit, messageHandler: (cmd: string, msg: Packet) => any, afterConnect: (wasReconnect: boolean) => any): void;
    connect(): Promise<any>;
    private startTcpServer;
    private startUdpServer;
    loadUrls(): Promise<void>;
    receive(type: PacketTypes, message: Buffer, socket?: Socket): any;
    onIncomingMessage(type: PacketTypes, message: Buffer, socket: Socket): any;
    startTimers(): void;
    stopTimers(): void;
    processGossipRequest(message: Buffer): void;
    processGossipResponse(message: Buffer): void;
    sendGossipRequest(): void;
    private sendGossipToRandomEndpoint;
    private addOfflineNode;
    getNode(nodeID: string): Node | undefined;
    private getNodeAddress;
    publish(packet: Packet): Promise<void> | undefined;
    send(type: PacketTypes, data: Buffer, meta: GenericObject): Promise<void> | undefined;
    sendHello(nodeID: string): Promise<void> | undefined;
    processGossipHello(msg: Buffer, socket?: Socket): void;
    disconnect(): void;
    getLocalNodeInfo(): Node | null | undefined;
    getNodeInfo(nodeID: string): Node | undefined;
    subscribe(cmd: PacketTypes, nodeID: string): any;
}
