/// /// import { net } from "../adapter"; import ConnectFactor, { ConnectPipe } from "../connect"; import { AcceptOptions, AuthData, ReadData, WriteData } from "../types"; import { ProtocolType } from "../connect/types"; import { IOSocket } from "../stream"; import EventEmitter from "eventemitter3"; export type EventType = { open: () => void; in: (data: ReadData) => void; out: (data: WriteData) => void; auth: (data: AuthData) => void; close: (socket: net.Socket) => void; timeout: (socket?: net.Socket) => void; error: (err: Error) => void; }; /** * 接收应用端接入协议处理基类 */ export default abstract class Accept extends EventEmitter { connectFactor: ConnectFactor; options: AcceptOptions; protocol: ProtocolType; constructor(options: AcceptOptions); get acceptAuth(): import("../types").AcceptAuthData | undefined; clone2target(target: Accept): void; /** * 注册连接器, 连接目标服务协议 * @param connectFactor */ registerConnect(connectFactor: ConnectFactor): void; /**; * 是否可以接入, 请求的协议是否可以接入处理 * @param socket * @param chunk */ abstract isAccept(chunk: Buffer): Promise; /** * 连接处理 * @param socket * @param firstChunk */ abstract handle(socket: IOSocket, firstChunk: Buffer): Promise; /** * 连接目标 * @param host 目标服务主机ip * @param port 目标服务主机端口 * @param localSocket 本地socket连接 * @param chunk 首次请求的原始数据 * @param inputTransform 输入流解码 */ protected connect({ host, port, localSocket, user, data }: ConnectPipe): Promise; protected splitPasswodArgs(str: string): { password: string; args: string[]; }; }