diff options
Diffstat (limited to 'cli/js/net_unstable.ts')
-rw-r--r-- | cli/js/net_unstable.ts | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/cli/js/net_unstable.ts b/cli/js/net_unstable.ts new file mode 100644 index 000000000..24c1d619d --- /dev/null +++ b/cli/js/net_unstable.ts @@ -0,0 +1,79 @@ +import * as netOps from "./ops/net.ts"; +import { + Listener, + DatagramConn, + ListenerImpl, + DatagramImpl, + ConnectOptions, + Conn, + ConnImpl, + listen as stableListen, + connect as stableConnect, +} from "./net.ts"; + +export interface ListenOptions { + port: number; + hostname?: string; + transport?: "tcp" | "udp"; +} + +export interface UnixListenOptions { + transport: "unix" | "unixpacket"; + path: string; +} + +export function listen( + options: ListenOptions & { transport?: "tcp" } +): Listener; +export function listen( + options: UnixListenOptions & { transport: "unix" } +): Listener; +export function listen(options: ListenOptions | UnixListenOptions): Listener { + if (options.transport === "unix") { + const res = netOps.listen(options); + return new ListenerImpl(res.rid, res.localAddr); + } else { + return stableListen(options as ListenOptions & { transport?: "tcp" }); + } +} + +export function listenDatagram( + options: ListenOptions & { transport: "udp" } +): DatagramConn; +export function listenDatagram( + options: UnixListenOptions & { transport: "unixpacket" } +): DatagramConn; +export function listenDatagram( + options: ListenOptions | UnixListenOptions +): DatagramConn { + let res; + if (options.transport === "unixpacket") { + res = netOps.listen(options); + } else { + res = netOps.listen({ + transport: "udp", + hostname: "127.0.0.1", + ...(options as ListenOptions), + }); + } + + return new DatagramImpl(res.rid, res.localAddr); +} + +export interface UnixConnectOptions { + transport: "unix"; + path: string; +} + +export async function connect(options: UnixConnectOptions): Promise<Conn>; +export async function connect(options: ConnectOptions): Promise<Conn>; +export async function connect( + options: ConnectOptions | UnixConnectOptions +): Promise<Conn> { + if (options.transport === "unix") { + const res = await netOps.connect(options); + return new ConnImpl(res.rid, res.remoteAddr!, res.localAddr!); + } else { + return stableConnect(options as ConnectOptions); + } +} |