@yume-chan/adb 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.json +15 -0
  2. package/CHANGELOG.md +9 -1
  3. package/esm/adb.d.ts +5 -4
  4. package/esm/adb.d.ts.map +1 -1
  5. package/esm/adb.js +15 -10
  6. package/esm/adb.js.map +1 -1
  7. package/esm/commands/reverse.d.ts +7 -10
  8. package/esm/commands/reverse.d.ts.map +1 -1
  9. package/esm/commands/reverse.js +9 -15
  10. package/esm/commands/reverse.js.map +1 -1
  11. package/esm/commands/subprocess/protocols/none.d.ts +1 -1
  12. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  13. package/esm/commands/subprocess/protocols/none.js +6 -6
  14. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  15. package/esm/commands/sync/pull.d.ts.map +1 -1
  16. package/esm/commands/sync/pull.js +6 -3
  17. package/esm/commands/sync/pull.js.map +1 -1
  18. package/esm/socket/dispatcher.d.ts +21 -14
  19. package/esm/socket/dispatcher.d.ts.map +1 -1
  20. package/esm/socket/dispatcher.js +78 -53
  21. package/esm/socket/dispatcher.js.map +1 -1
  22. package/esm/socket/socket.d.ts +11 -2
  23. package/esm/socket/socket.d.ts.map +1 -1
  24. package/esm/socket/socket.js +21 -16
  25. package/esm/socket/socket.js.map +1 -1
  26. package/esm/stream/transform.d.ts +17 -12
  27. package/esm/stream/transform.d.ts.map +1 -1
  28. package/esm/stream/transform.js +45 -81
  29. package/esm/stream/transform.js.map +1 -1
  30. package/package.json +4 -4
  31. package/src/adb.ts +18 -12
  32. package/src/commands/reverse.ts +13 -24
  33. package/src/commands/subprocess/protocols/none.ts +6 -6
  34. package/src/commands/sync/pull.ts +6 -3
  35. package/src/socket/dispatcher.ts +96 -65
  36. package/src/socket/socket.ts +36 -30
  37. package/src/stream/transform.ts +53 -92
  38. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/stream/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/stream/transform.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yume-chan/adb",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "TypeScript implementation of Android Debug Bridge (ADB) protocol.",
5
5
  "keywords": [
6
6
  "adb",
@@ -26,9 +26,9 @@
26
26
  "types": "esm/index.d.ts",
27
27
  "dependencies": {
28
28
  "@yume-chan/async": "^2.1.4",
29
- "@yume-chan/dataview-bigint-polyfill": "^0.0.13",
30
- "@yume-chan/event": "^0.0.13",
31
- "@yume-chan/struct": "^0.0.13",
29
+ "@yume-chan/dataview-bigint-polyfill": "^0.0.14",
30
+ "@yume-chan/event": "^0.0.14",
31
+ "@yume-chan/struct": "^0.0.14",
32
32
  "tslib": "^2.3.1",
33
33
  "web-streams-polyfill": "^3.2.0"
34
34
  },
package/src/adb.ts CHANGED
@@ -5,7 +5,7 @@ import { AdbAuthenticationProcessor, ADB_DEFAULT_AUTHENTICATORS, type AdbCredent
5
5
  import { AdbPower, AdbReverseCommand, AdbSubprocess, AdbSync, AdbTcpIpCommand, escapeArg, framebuffer, install, type AdbFrameBuffer } from './commands/index.js';
6
6
  import { AdbFeatures } from './features.js';
7
7
  import { AdbCommand, calculateChecksum, type AdbPacketData, type AdbPacketInit } from './packet.js';
8
- import { AdbPacketDispatcher, type AdbSocket } from './socket/index.js';
8
+ import { AdbIncomingSocketHandler, AdbPacketDispatcher, type AdbSocket, type Closeable } from './socket/index.js';
9
9
  import { AbortController, DecodeUtf8Stream, GatherStringStream, WritableStream, type ReadableWritablePair } from "./stream/index.js";
10
10
  import { decodeUtf8, encodeUtf8 } from "./utils/index.js";
11
11
 
@@ -18,7 +18,7 @@ export enum AdbPropKey {
18
18
 
19
19
  export const VERSION_OMIT_CHECKSUM = 0x01000001;
20
20
 
21
- export class Adb {
21
+ export class Adb implements Closeable {
22
22
  /**
23
23
  * It's possible to call `authenticate` multiple times on a single connection,
24
24
  * every time the device receives a `CNXN` packet, it resets its internal state,
@@ -53,7 +53,7 @@ export class Adb {
53
53
  await sendPacket(response);
54
54
  break;
55
55
  default:
56
- // Maybe the previous ADB session exited without reading all packets,
56
+ // Maybe the previous ADB client exited without reading all packets,
57
57
  // so they are still waiting in OS internal buffer.
58
58
  // Just ignore them.
59
59
  // Because a `Connect` packet will reset the device,
@@ -78,15 +78,17 @@ export class Adb {
78
78
 
79
79
  try {
80
80
  // https://android.googlesource.com/platform/packages/modules/adb/+/79010dc6d5ca7490c493df800d4421730f5466ca/transport.cpp#1252
81
- // There are some other feature constants, but some of them are only used by ADB server, not devices.
81
+ // There are some other feature constants, but some of them are only used by ADB server, not devices (daemons).
82
82
  const features = [
83
83
  AdbFeatures.ShellV2,
84
84
  AdbFeatures.Cmd,
85
85
  AdbFeatures.StatV2,
86
86
  AdbFeatures.ListV2,
87
- 'fixed_push_mkdir',
87
+ AdbFeatures.FixedPushMkdir,
88
88
  'apex',
89
89
  'abb',
90
+ // only tells the client the symlink timestamp issue in `adb push --sync` has been fixed.
91
+ // No special handling required.
90
92
  'fixed_push_symlink_timestamp',
91
93
  'abb_exec',
92
94
  'remount_shell',
@@ -130,9 +132,9 @@ export class Adb {
130
132
  }
131
133
  }
132
134
 
133
- private readonly packetDispatcher: AdbPacketDispatcher;
135
+ private readonly dispatcher: AdbPacketDispatcher;
134
136
 
135
- public get disconnected() { return this.packetDispatcher.disconnected; }
137
+ public get disconnected() { return this.dispatcher.disconnected; }
136
138
 
137
139
  private _protocolVersion: number | undefined;
138
140
  public get protocolVersion() { return this._protocolVersion; }
@@ -172,7 +174,7 @@ export class Adb {
172
174
  appendNullToServiceString = true;
173
175
  }
174
176
 
175
- this.packetDispatcher = new AdbPacketDispatcher(
177
+ this.dispatcher = new AdbPacketDispatcher(
176
178
  connection,
177
179
  {
178
180
  calculateChecksum,
@@ -185,7 +187,7 @@ export class Adb {
185
187
 
186
188
  this.subprocess = new AdbSubprocess(this);
187
189
  this.power = new AdbPower(this);
188
- this.reverse = new AdbReverseCommand(this.packetDispatcher);
190
+ this.reverse = new AdbReverseCommand(this);
189
191
  this.tcpip = new AdbTcpIpCommand(this);
190
192
  }
191
193
 
@@ -224,8 +226,12 @@ export class Adb {
224
226
  }
225
227
  }
226
228
 
229
+ public addIncomingSocketHandler(handler: AdbIncomingSocketHandler) {
230
+ return this.dispatcher.addIncomingSocketHandler(handler);
231
+ }
232
+
227
233
  public async createSocket(service: string): Promise<AdbSocket> {
228
- return this.packetDispatcher.createSocket(service);
234
+ return this.dispatcher.createSocket(service);
229
235
  }
230
236
 
231
237
  public async createSocketAndWait(service: string): Promise<string> {
@@ -264,7 +270,7 @@ export class Adb {
264
270
  return framebuffer(this);
265
271
  }
266
272
 
267
- public async dispose(): Promise<void> {
268
- this.packetDispatcher.dispose();
273
+ public async close(): Promise<void> {
274
+ await this.dispatcher.close();
269
275
  }
270
276
  }
@@ -2,15 +2,11 @@
2
2
 
3
3
  import { AutoDisposable } from '@yume-chan/event';
4
4
  import Struct from '@yume-chan/struct';
5
- import type { AdbPacketData } from '../packet.js';
6
- import type { AdbIncomingSocketEventArgs, AdbPacketDispatcher, AdbSocket } from '../socket/index.js';
5
+ import type { Adb } from "../adb.js";
6
+ import type { AdbIncomingSocketHandler, AdbSocket } from '../socket/index.js';
7
7
  import { AdbBufferedStream } from '../stream/index.js';
8
8
  import { decodeUtf8 } from "../utils/index.js";
9
9
 
10
- export interface AdbReverseHandler {
11
- onSocket(packet: AdbPacketData, socket: AdbSocket): void;
12
- }
13
-
14
10
  export interface AdbForwardListener {
15
11
  deviceSerial: string;
16
12
 
@@ -32,37 +28,30 @@ const AdbReverseErrorResponse =
32
28
  });
33
29
 
34
30
  export class AdbReverseCommand extends AutoDisposable {
35
- protected localPortToHandler = new Map<number, AdbReverseHandler>();
31
+ protected localPortToHandler = new Map<number, AdbIncomingSocketHandler>();
36
32
 
37
33
  protected deviceAddressToLocalPort = new Map<string, number>();
38
34
 
39
- protected dispatcher: AdbPacketDispatcher;
35
+ protected adb: Adb;
40
36
 
41
37
  protected listening = false;
42
38
 
43
- public constructor(dispatcher: AdbPacketDispatcher) {
39
+ public constructor(adb: Adb) {
44
40
  super();
45
41
 
46
- this.dispatcher = dispatcher;
47
- this.addDisposable(this.dispatcher.onIncomingSocket(this.handleIncomingSocket, this));
42
+ this.adb = adb;
43
+ this.addDisposable(this.adb.addIncomingSocketHandler(this.handleIncomingSocket));
48
44
  }
49
45
 
50
- protected handleIncomingSocket(e: AdbIncomingSocketEventArgs): void {
51
- if (e.handled) {
52
- return;
53
- }
54
-
55
- const address = decodeUtf8(e.packet.payload);
46
+ protected handleIncomingSocket = async (socket: AdbSocket) => {
47
+ const address = socket.serviceString;
56
48
  // Address format: `tcp:12345\0`
57
49
  const port = Number.parseInt(address.substring(4));
58
- if (this.localPortToHandler.has(port)) {
59
- this.localPortToHandler.get(port)!.onSocket(e.packet, e.socket);
60
- e.handled = true;
61
- }
62
- }
50
+ return !!(await this.localPortToHandler.get(port)?.(socket));
51
+ };
63
52
 
64
53
  private async createBufferedStream(service: string) {
65
- const socket = await this.dispatcher.createSocket(service);
54
+ const socket = await this.adb.createSocket(service);
66
55
  return new AdbBufferedStream(socket);
67
56
  }
68
57
 
@@ -96,7 +85,7 @@ export class AdbReverseCommand extends AutoDisposable {
96
85
  public async add(
97
86
  deviceAddress: string,
98
87
  localPort: number,
99
- handler: AdbReverseHandler,
88
+ handler: AdbIncomingSocketHandler,
100
89
  ): Promise<string> {
101
90
  const stream = await this.sendRequest(`reverse:forward:${deviceAddress};tcp:${localPort}`);
102
91
 
@@ -1,6 +1,6 @@
1
1
  import type { Adb } from "../../../adb.js";
2
2
  import type { AdbSocket } from "../../../socket/index.js";
3
- import { DuplexStreamFactory, type ReadableStream } from "../../../stream/index.js";
3
+ import { DuplexStreamFactory, ReadableStream } from "../../../stream/index.js";
4
4
  import type { AdbSubprocessProtocol } from "./types.js";
5
5
 
6
6
  /**
@@ -19,9 +19,9 @@ export class AdbSubprocessNoneProtocol implements AdbSubprocessProtocol {
19
19
  }
20
20
 
21
21
  public static async raw(adb: Adb, command: string) {
22
- // Native ADB client doesn't allow none protocol + raw mode,
23
- // But ADB daemon supports it.
24
- return new AdbSubprocessNoneProtocol(await adb.createSocket(`shell,raw:${command}`));
22
+ // `shell,raw:${command}` also triggers raw mode,
23
+ // But is not supported before Android 7.
24
+ return new AdbSubprocessNoneProtocol(await adb.createSocket(`exec:${command}`));
25
25
  }
26
26
 
27
27
  private readonly socket: AdbSocket;
@@ -53,8 +53,8 @@ export class AdbSubprocessNoneProtocol implements AdbSubprocessProtocol {
53
53
  },
54
54
  });
55
55
 
56
- this._stdout = factory.createWrapReadable(this.socket.readable);
57
- this._stderr = factory.createReadable();
56
+ this._stdout = factory.wrapReadable(this.socket.readable);
57
+ this._stderr = factory.wrapReadable(new ReadableStream());
58
58
  this._exit = factory.closed.then(() => 0);
59
59
  }
60
60
 
@@ -9,7 +9,7 @@ export const AdbSyncDataResponse =
9
9
  .uint8Array('data', { lengthField: 'dataLength' })
10
10
  .extra({ id: AdbSyncResponseId.Data as const });
11
11
 
12
- const ResponseTypes = {
12
+ const RESPONSE_TYPES = {
13
13
  [AdbSyncResponseId.Data]: AdbSyncDataResponse,
14
14
  [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncDataResponse.size),
15
15
  };
@@ -24,7 +24,7 @@ export function adbSyncPull(
24
24
  await adbSyncWriteRequest(writer, AdbSyncRequestId.Receive, path);
25
25
  },
26
26
  async pull(controller) {
27
- const response = await adbSyncReadResponse(stream, ResponseTypes);
27
+ const response = await adbSyncReadResponse(stream, RESPONSE_TYPES);
28
28
  switch (response.id) {
29
29
  case AdbSyncResponseId.Data:
30
30
  controller.enqueue(response.data!);
@@ -35,7 +35,10 @@ export function adbSyncPull(
35
35
  default:
36
36
  throw new Error('Unexpected response id');
37
37
  }
38
- }
38
+ },
39
+ cancel() {
40
+ throw new Error(`Sync commands don't support cancel.`);
41
+ },
39
42
  }, {
40
43
  highWaterMark: 16 * 1024,
41
44
  size(chunk) { return chunk.byteLength; }
@@ -1,20 +1,12 @@
1
1
  import { AsyncOperationManager, PromiseResolver } from '@yume-chan/async';
2
- import { AutoDisposable, EventEmitter } from '@yume-chan/event';
2
+ import type { RemoveEventListener } from '@yume-chan/event';
3
+ import type { ValueOrPromise } from "@yume-chan/struct";
4
+
3
5
  import { AdbCommand, calculateChecksum, type AdbPacketData, type AdbPacketInit } from '../packet.js';
4
6
  import { AbortController, WritableStream, WritableStreamDefaultWriter, type ReadableWritablePair } from '../stream/index.js';
5
7
  import { decodeUtf8, encodeUtf8 } from '../utils/index.js';
6
8
  import { AdbSocket, AdbSocketController } from './socket.js';
7
9
 
8
- export interface AdbIncomingSocketEventArgs {
9
- handled: boolean;
10
-
11
- packet: AdbPacketData;
12
-
13
- serviceString: string;
14
-
15
- socket: AdbSocket;
16
- }
17
-
18
10
  const EmptyUint8Array = new Uint8Array(0);
19
11
 
20
12
  export interface AdbPacketDispatcherOptions {
@@ -29,7 +21,23 @@ export interface AdbPacketDispatcherOptions {
29
21
  maxPayloadSize: number;
30
22
  }
31
23
 
32
- export class AdbPacketDispatcher extends AutoDisposable {
24
+ export type AdbIncomingSocketHandler = (socket: AdbSocket) => ValueOrPromise<boolean>;
25
+
26
+ export interface Closeable {
27
+ close(): ValueOrPromise<void>;
28
+ }
29
+
30
+ /**
31
+ * The dispatcher is the "dumb" part of the connection handling logic.
32
+ *
33
+ * Except some options to change some minor behaviors,
34
+ * its only job is forwarding packets between authenticated underlying streams
35
+ * and abstracted socket objects.
36
+ *
37
+ * The `Adb` class is responsible for doing the authentication,
38
+ * negotiating the options, and has shortcuts to high-level services.
39
+ */
40
+ export class AdbPacketDispatcher implements Closeable {
33
41
  // ADB socket id starts from 1
34
42
  // (0 means open failed)
35
43
  private readonly initializers = new AsyncOperationManager(1);
@@ -42,8 +50,7 @@ export class AdbPacketDispatcher extends AutoDisposable {
42
50
  private _disconnected = new PromiseResolver<void>();
43
51
  public get disconnected() { return this._disconnected.promise; }
44
52
 
45
- private readonly incomingSocketEvent = this.addDisposable(new EventEmitter<AdbIncomingSocketEventArgs>());
46
- public get onIncomingSocket() { return this.incomingSocketEvent.event; }
53
+ private _incomingSocketHandlers: Set<AdbIncomingSocketHandler> = new Set();
47
54
 
48
55
  private _abortController = new AbortController();
49
56
 
@@ -51,41 +58,42 @@ export class AdbPacketDispatcher extends AutoDisposable {
51
58
  connection: ReadableWritablePair<AdbPacketData, AdbPacketInit>,
52
59
  options: AdbPacketDispatcherOptions
53
60
  ) {
54
- super();
55
-
56
61
  this.options = options;
57
62
 
58
63
  connection.readable
59
64
  .pipeTo(new WritableStream({
60
65
  write: async (packet) => {
61
- try {
62
- switch (packet.command) {
63
- case AdbCommand.OK:
64
- this.handleOk(packet);
65
- return;
66
- case AdbCommand.Close:
67
- await this.handleClose(packet);
68
- return;
69
- case AdbCommand.Write:
70
- if (this.sockets.has(packet.arg1)) {
71
- await this.sockets.get(packet.arg1)!.enqueue(packet.payload);
72
- await this.sendPacket(AdbCommand.OK, packet.arg1, packet.arg0);
73
- }
74
-
75
- // Maybe the device is responding to a packet of last connection
76
- // Just ignore it
77
- return;
78
- case AdbCommand.Open:
79
- await this.handleOpen(packet);
80
- return;
81
- }
82
- } catch (e) {
83
- // Throw error here will stop the pipe
84
- // But won't close `readable` because of `preventCancel: true`
85
- throw e;
66
+ switch (packet.command) {
67
+ case AdbCommand.OK:
68
+ this.handleOk(packet);
69
+ break;
70
+ case AdbCommand.Close:
71
+ await this.handleClose(packet);
72
+ break;
73
+ case AdbCommand.Write:
74
+ if (this.sockets.has(packet.arg1)) {
75
+ await this.sockets.get(packet.arg1)!.enqueue(packet.payload);
76
+ await this.sendPacket(AdbCommand.OK, packet.arg1, packet.arg0);
77
+ break;
78
+ }
79
+ throw new Error(`Unknown local socket id: ${packet.arg1}`);
80
+ case AdbCommand.Open:
81
+ await this.handleOpen(packet);
82
+ break;
83
+ default:
84
+ // Junk data may only appear in the authentication phase,
85
+ // since the dispatcher only works after authentication,
86
+ // all packets should have a valid command.
87
+ // (although it's possible that Adb added new commands in the future)
88
+ throw new Error(`Unknown command: ${packet.command.toString(16)}`);
86
89
  }
87
90
  },
88
91
  }), {
92
+ // There are multiple reasons for the pipe to stop,
93
+ // including device disconnection, protocol error, or user abort,
94
+ // if the underlying streams are still open,
95
+ // it's still possible to create another ADB connection.
96
+ // So don't close `readable` here.
89
97
  preventCancel: false,
90
98
  signal: this._abortController.signal,
91
99
  })
@@ -125,13 +133,18 @@ export class AdbPacketDispatcher extends AutoDisposable {
125
133
  * CLOSE() operations.
126
134
  */
127
135
 
128
- // So don't return if `reject` didn't find a pending socket
136
+ // If the socket is still pending
129
137
  if (packet.arg0 === 0 &&
130
138
  this.initializers.reject(packet.arg1, new Error('Socket open failed'))) {
131
139
  // Device failed to create the socket
140
+ // (unknown service string, failed to execute command, etc.)
141
+ // it doesn't break the connection,
142
+ // so only reject the socket creation promise,
143
+ // don't throw an error here.
132
144
  return;
133
145
  }
134
146
 
147
+ // Ignore `arg0` and search for the socket
135
148
  const socket = this.sockets.get(packet.arg1);
136
149
  if (socket) {
137
150
  // The device want to close the socket
@@ -143,8 +156,18 @@ export class AdbPacketDispatcher extends AutoDisposable {
143
156
  return;
144
157
  }
145
158
 
146
- // Maybe the device is responding to a packet of last connection
147
- // Just ignore it
159
+ // TODO: adb: is double closing an socket a catastrophic error?
160
+ // If the client sends two `CLSE` packets for one socket,
161
+ // the device may also respond with two `CLSE` packets.
162
+ }
163
+
164
+ public addIncomingSocketHandler(handler: AdbIncomingSocketHandler): RemoveEventListener {
165
+ this._incomingSocketHandlers.add(handler);
166
+ const remove = () => {
167
+ this._incomingSocketHandlers.delete(handler);
168
+ };
169
+ remove.dispose = remove;
170
+ return remove;
148
171
  }
149
172
 
150
173
  private async handleOpen(packet: AdbPacketData) {
@@ -164,20 +187,15 @@ export class AdbPacketDispatcher extends AutoDisposable {
164
187
  serviceString,
165
188
  });
166
189
 
167
- const args: AdbIncomingSocketEventArgs = {
168
- handled: false,
169
- packet,
170
- serviceString,
171
- socket: controller.socket,
172
- };
173
- this.incomingSocketEvent.fire(args);
174
-
175
- if (args.handled) {
176
- this.sockets.set(localId, controller);
177
- await this.sendPacket(AdbCommand.OK, localId, remoteId);
178
- } else {
179
- await this.sendPacket(AdbCommand.Close, 0, remoteId);
190
+ for (const handler of this._incomingSocketHandlers) {
191
+ if (await handler(controller.socket)) {
192
+ this.sockets.set(localId, controller);
193
+ await this.sendPacket(AdbCommand.OK, localId, remoteId);
194
+ return;
195
+ }
180
196
  }
197
+
198
+ await this.sendPacket(AdbCommand.Close, 0, remoteId);
181
199
  }
182
200
 
183
201
  public async createSocket(serviceString: string): Promise<AdbSocket> {
@@ -250,21 +268,34 @@ export class AdbPacketDispatcher extends AutoDisposable {
250
268
  await this._writer.write(init as AdbPacketInit);
251
269
  }
252
270
 
253
- public override dispose() {
254
- for (const socket of this.sockets.values()) {
255
- socket.dispose();
256
- }
257
- this.sockets.clear();
271
+ public async close() {
272
+ // Send `CLSE` packets for all sockets
273
+ await Promise.all(
274
+ Array.from(
275
+ this.sockets.values(),
276
+ socket => socket.close(),
277
+ )
278
+ );
258
279
 
280
+ // Stop receiving
281
+ // It's possible that we haven't received all `CLSE` confirm packets,
282
+ // but it doesn't matter, the next connection can cope with them.
259
283
  try {
260
- // Stop pipes
261
284
  this._abortController.abort();
262
285
  } catch { }
263
286
 
287
+ // Adb connection doesn't have a method to confirm closing,
288
+ // so call `dispose` immediately
289
+ this.dispose();
290
+ }
291
+
292
+ private dispose() {
293
+ for (const socket of this.sockets.values()) {
294
+ socket.dispose();
295
+ }
296
+
264
297
  this._writer.releaseLock();
265
298
 
266
299
  this._disconnected.resolve();
267
-
268
- super.dispose();
269
300
  }
270
301
  }
@@ -1,7 +1,8 @@
1
1
  import { PromiseResolver } from "@yume-chan/async";
2
+ import type { Disposable } from "@yume-chan/event";
2
3
  import { AdbCommand } from '../packet.js';
3
- import { ChunkStream, DuplexStreamFactory, pipeFrom, type PushReadableStreamController, type ReadableStream, type ReadableWritablePair, type WritableStream } from '../stream/index.js';
4
- import type { AdbPacketDispatcher } from './dispatcher.js';
4
+ import { ChunkStream, DuplexStreamFactory, pipeFrom, PushReadableStream, type PushReadableStreamController, type ReadableStream, type ReadableWritablePair, type WritableStream } from '../stream/index.js';
5
+ import type { AdbPacketDispatcher, Closeable } from './dispatcher.js';
5
6
 
6
7
  export interface AdbSocketInfo {
7
8
  localId: number;
@@ -17,7 +18,7 @@ export interface AdbSocketConstructionOptions extends AdbSocketInfo {
17
18
  highWaterMark?: number | undefined;
18
19
  }
19
20
 
20
- export class AdbSocketController implements AdbSocketInfo, ReadableWritablePair<Uint8Array, Uint8Array> {
21
+ export class AdbSocketController implements AdbSocketInfo, ReadableWritablePair<Uint8Array, Uint8Array>, Closeable, Disposable {
21
22
  private readonly dispatcher!: AdbPacketDispatcher;
22
23
 
23
24
  public readonly localId!: number;
@@ -49,17 +50,32 @@ export class AdbSocketController implements AdbSocketInfo, ReadableWritablePair<
49
50
 
50
51
  this._factory = new DuplexStreamFactory<Uint8Array, Uint8Array>({
51
52
  close: async () => {
52
- await this.close();
53
+ await this.dispatcher.sendPacket(
54
+ AdbCommand.Close,
55
+ this.localId,
56
+ this.remoteId
57
+ );
58
+
59
+ // Don't `dispose` here, we need to wait for `CLSE` response packet.
60
+ return false;
53
61
  },
54
- });
62
+ dispose: () => {
63
+ this._closed = true;
55
64
 
56
- this._readable = this._factory.createPushReadable(controller => {
57
- this._readableController = controller;
58
- }, {
59
- highWaterMark: options.highWaterMark ?? 16 * 1024,
60
- size(chunk) { return chunk.byteLength; }
65
+ // Error out the pending writes
66
+ this._writePromise?.reject(new Error('Socket closed'));
67
+ },
61
68
  });
62
69
 
70
+ this._readable = this._factory.wrapReadable(
71
+ new PushReadableStream(controller => {
72
+ this._readableController = controller;
73
+ }, {
74
+ highWaterMark: options.highWaterMark ?? 16 * 1024,
75
+ size(chunk) { return chunk.byteLength; }
76
+ })
77
+ );
78
+
63
79
  this.writable = pipeFrom(
64
80
  this._factory.createWritable({
65
81
  write: async (chunk) => {
@@ -89,32 +105,22 @@ export class AdbSocketController implements AdbSocketInfo, ReadableWritablePair<
89
105
  }
90
106
 
91
107
  public async close(): Promise<void> {
92
- // Error out the pending writes
93
- this._writePromise?.reject(new Error('Socket closed'));
94
-
95
- if (!this._closed) {
96
- this._closed = true;
97
-
98
- // Only send close packet when `close` is called before `dispose`
99
- // (the client initiated the close)
100
- await this.dispatcher.sendPacket(
101
- AdbCommand.Close,
102
- this.localId,
103
- this.remoteId
104
- );
105
- }
108
+ this._factory.close();
106
109
  }
107
110
 
108
111
  public dispose() {
109
- this._closed = true;
110
-
111
- this._factory.close();
112
-
113
- // Close `writable` side
114
- this.close();
112
+ this._factory.dispose();
115
113
  }
116
114
  }
117
115
 
116
+ /**
117
+ * AdbSocket is a duplex stream.
118
+ *
119
+ * To close it, call either `socket.close()`,
120
+ * `socket.readable.cancel()`, `socket.readable.getReader().cancel()`,
121
+ * `socket.writable.abort()`, `socket.writable.getWriter().abort()`,
122
+ * `socket.writable.close()` or `socket.writable.getWriter().close()`.
123
+ */
118
124
  export class AdbSocket implements AdbSocketInfo, ReadableWritablePair<Uint8Array, Uint8Array>{
119
125
  private _controller: AdbSocketController;
120
126