import { EventEmitter } from 'events'
import { URL } from 'url'
import { SocketConfig } from '../../Types'

export declare abstract class AbstractSocketClient extends EventEmitter {
   url: URL
   config: SocketConfig
   abstract get isOpen(): boolean
   abstract get isClosed(): boolean
   abstract get isClosing(): boolean
   abstract get isConnecting(): boolean
   constructor(url: URL, config: SocketConfig)
   abstract connect(): Promise<void>
   abstract close(): Promise<void>
   abstract send(str: Uint8Array | string, cb?: (err?: Error) => void): boolean
}