/// export interface ISocketConfig { maxRetries: number; retryBackoffMillis: number; connectTimeoutMillis: number; } export declare const defaultSocketConfig: ISocketConfig; export interface IPacket { type: number; toBuffer(): Buffer; } export interface IPacketCodec { paddingSize?: number; encode(packet: Buffer): Buffer; decode(packet: Buffer): Buffer; } export declare const PlaintextCodec: IPacketCodec; export declare enum PacketReadState { PENDING = 0, DONE = 1 } export interface IBufferReader { read(data: Buffer, paddingSize?: number): PacketReadState; get(): Buffer; remainder(): Buffer | undefined; } /** * Reads a single packet then should be discarded; any data * overflow can be retrieved from `remainder()` */ export interface IPacketReader { read(data: Buffer, paddingSize?: number): PacketReadState; get(): IPacket; remainder(): Buffer | undefined; } export interface IProtocolVersion { major: number; minor: number; } export interface IDeviceProtocol { version: IProtocolVersion; createPacketReader(): IPacketReader; onPacketReceived?(socket: IDeviceSocket, packet: IPacket): Promise; requestDisconnect?(socket: IDeviceSocket): Promise; } /** * Represents a persistent, low-level connection to a device */ export interface IDeviceSocket { protocolVersion: IProtocolVersion; isConnected: boolean; openedTimestamp: number; close(): Promise; receive(): AsyncIterable; send(packet: IPacket): Promise; setCodec(encoder: IPacketCodec): void; execute(proc: IDeviceProc): Promise; /** * Request that this socket stay connected for at least * `extraLifeMillis` longer. May be helpful in certain procs to * ensure a task is completed before we disconnect when close() * is called */ requestKeepAlive(extraLifeMillis: number): void; } export interface IDeviceProc { perform(socket: IDeviceSocket): Promise; }