UNPKG

@yume-chan/adb

Version:

TypeScript implementation of Android Debug Bridge (ADB) protocol.

57 lines (46 loc) 1.63 kB
import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; import type { AbortSignal, MaybeConsumable, ReadableStream, WritableStream, } from "@yume-chan/stream-extra"; import type { AdbSocket } from "../../../adb.js"; import type { AdbNoneProtocolProcess } from "./spawner.js"; export class AdbNoneProtocolProcessImpl implements AdbNoneProtocolProcess { readonly #socket: AdbSocket; get stdin(): WritableStream<MaybeConsumable<Uint8Array>> { return this.#socket.writable; } get output(): ReadableStream<Uint8Array> { return this.#socket.readable; } readonly #exited: Promise<undefined>; get exited(): Promise<undefined> { return this.#exited; } constructor(socket: AdbSocket, signal?: AbortSignal) { this.#socket = socket; if (signal) { // `signal` won't affect `this.output` // So remaining data can still be read // (call `controller.error` will discard all pending data) const exited = new PromiseResolver<undefined>(); this.#socket.closed.then( () => exited.resolve(undefined), (e) => exited.reject(e), ); signal.addEventListener("abort", () => { exited.reject(signal.reason); this.#socket.close(); }); this.#exited = exited.promise; } else { this.#exited = this.#socket.closed; } } kill(): MaybePromiseLike<void> { return this.#socket.close(); } }