///
import Accept from "./accept";
import { net } from "../adapter";
import ConnectFactor from "../connect";
import Socks5Accept from "./socks5.accept";
import HttpAccept from "./http.accept";
import LightAccept from "./light.accept";
import AigoAccept from "./aigo.accept";
import { CreateCallback, AcceptOptions, AcceptData, //
StreamEvent, AuthData, AcceptSocket, ProtocolType, PeerOptions } from "../types";
import EventEmitter from "eventemitter3";
import Peer from "../stream/peer/peer";
export type EventName = StreamEvent & {
open: () => void;
accept: (data: AcceptData) => void;
/**
* 接入风险警告
*/
risk: (data: {
ip: string;
port: number;
message: string;
}) => void;
auth: (data: AuthData) => void;
};
/**
* 本地代理接收协议包装类, 用于接入本地的连接接入
*/
export default class AcceptFactor extends EventEmitter {
static HttpAccept: typeof HttpAccept;
static Socks5Accept: typeof Socks5Accept;
static LightAccept: typeof LightAccept;
static AigoAccept: typeof AigoAccept;
static Accept: typeof Accept;
/** 接入协议类列表 */
accepts: Map;
/** 连接远程代理的连接封装类 */
protected connectFactor: ConnectFactor;
server: net.Server;
peer: Peer;
private imageServer;
options: AcceptOptions;
private id;
private _open;
private acceptSockets;
get open(): boolean;
constructor(options?: AcceptOptions);
init(): Promise;
close(): void;
/**
* 注册本地代理的可接入协议类
* @param accept
*/
register(accept: Accept): this;
getAccept(protocol: ProtocolType): Accept | undefined;
/**
* 注册连接远程代理的协议封装类
* @param connectFactor
*/
registerConnectFactor(connectFactor: ConnectFactor): this;
/**
* 注册已经创建的本地服务, 注册这个就可以不用另行创建本地代理服务
* @param server
*/
registerServer(server: net.Server): void;
/**
* 创建镜像服务(需要把目标域名配置到hosts文件 指定到127.0.0.1, 如: 127.0.0.1 hub.docker.io)
* @param port
* @param host
* @param callback
* @returns
*/
createImageServer(port: number, host?: string, callback?: CreateCallback): Promise;
/**
* 创建本地代理服务
* @param port
* @param host
*/
createServer(port: number, host?: string, callback?: CreateCallback): Promise;
createPeerServer(options: PeerOptions, callback?: (peer: Peer) => void): Promise;
registerPipe(): void;
get acceptTotal(): number;
/**
* 接入处理本地的连接接入
* @param socket
*/
accept(socket: AcceptSocket): Promise;
private notiryNoSupportAccept;
}