@yume-chan/adb 0.0.9 → 0.0.10
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.
- package/CHANGELOG.json +23 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -21
- package/README.md +227 -257
- package/dts/adb.d.ts.map +1 -1
- package/dts/auth.d.ts +11 -1
- package/dts/auth.d.ts.map +1 -1
- package/dts/backend.d.ts +3 -5
- package/dts/backend.d.ts.map +1 -1
- package/dts/commands/demo-mode.d.ts +3 -3
- package/dts/commands/demo-mode.d.ts.map +1 -1
- package/dts/commands/reverse.d.ts +2 -2
- package/dts/commands/reverse.d.ts.map +1 -1
- package/dts/commands/shell/index.d.ts +31 -5
- package/dts/commands/shell/index.d.ts.map +1 -1
- package/dts/commands/shell/legacy.d.ts +13 -2
- package/dts/commands/shell/legacy.d.ts.map +1 -1
- package/dts/commands/shell/protocol.d.ts +11 -3
- package/dts/commands/shell/protocol.d.ts.map +1 -1
- package/dts/commands/shell/types.d.ts +35 -3
- package/dts/commands/shell/types.d.ts.map +1 -1
- package/dts/commands/sync/request.d.ts +1 -1
- package/dts/commands/sync/request.d.ts.map +1 -1
- package/dts/commands/sync/response.d.ts +2 -2
- package/dts/commands/sync/response.d.ts.map +1 -1
- package/dts/commands/sync/sync.d.ts.map +1 -1
- package/dts/crypto.d.ts +7 -0
- package/dts/crypto.d.ts.map +1 -1
- package/dts/packet.d.ts.map +1 -1
- package/dts/socket/close-event-emitter.d.ts.map +1 -1
- package/dts/socket/controller.d.ts.map +1 -1
- package/dts/socket/data-event-emitter.d.ts.map +1 -1
- package/dts/socket/dispatcher.d.ts.map +1 -1
- package/dts/stream/buffered-stream.d.ts +2 -4
- package/dts/stream/buffered-stream.d.ts.map +1 -1
- package/dts/utils/encoding.d.ts +3 -0
- package/dts/utils/encoding.d.ts.map +1 -0
- package/dts/utils/index.d.ts +1 -0
- package/dts/utils/index.d.ts.map +1 -1
- package/esm/adb.js +3 -2
- package/esm/adb.js.map +1 -1
- package/esm/auth.js +2 -2
- package/esm/auth.js.map +1 -1
- package/esm/commands/demo-mode.js +9 -9
- package/esm/commands/demo-mode.js.map +1 -1
- package/esm/commands/reverse.js +3 -2
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/shell/index.js +28 -18
- package/esm/commands/shell/index.js.map +1 -1
- package/esm/commands/shell/legacy.js +16 -0
- package/esm/commands/shell/legacy.js.map +1 -1
- package/esm/commands/shell/protocol.js +36 -9
- package/esm/commands/shell/protocol.js.map +1 -1
- package/esm/commands/sync/request.js +5 -4
- package/esm/commands/sync/request.js.map +1 -1
- package/esm/commands/sync/response.js +4 -3
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/crypto.js +7 -2
- package/esm/crypto.js.map +1 -1
- package/esm/packet.js +12 -14
- package/esm/packet.js.map +1 -1
- package/esm/socket/close-event-emitter.js.map +1 -1
- package/esm/socket/controller.js.map +1 -1
- package/esm/socket/data-event-emitter.js.map +1 -1
- package/esm/socket/dispatcher.js +7 -7
- package/esm/socket/dispatcher.js.map +1 -1
- package/esm/stream/buffered-stream.js +0 -6
- package/esm/stream/buffered-stream.js.map +1 -1
- package/esm/utils/encoding.js +11 -0
- package/esm/utils/encoding.js.map +1 -0
- package/esm/utils/index.js +1 -0
- package/esm/utils/index.js.map +1 -1
- package/package.json +44 -51
- package/src/adb.ts +243 -242
- package/src/auth.ts +166 -156
- package/src/backend.ts +20 -24
- package/src/commands/base.ts +11 -11
- package/src/commands/demo-mode.ts +160 -160
- package/src/commands/framebuffer.ts +73 -73
- package/src/commands/index.ts +8 -8
- package/src/commands/install.ts +21 -21
- package/src/commands/reverse.ts +134 -133
- package/src/commands/shell/index.ts +87 -68
- package/src/commands/shell/legacy.ts +59 -42
- package/src/commands/shell/protocol.ts +121 -94
- package/src/commands/shell/types.ts +55 -21
- package/src/commands/shell/utils.ts +20 -20
- package/src/commands/sync/index.ts +7 -7
- package/src/commands/sync/list.ts +39 -39
- package/src/commands/sync/pull.ts +34 -34
- package/src/commands/sync/push.ts +46 -46
- package/src/commands/sync/request.ts +49 -48
- package/src/commands/sync/response.ts +58 -57
- package/src/commands/sync/stat.ts +121 -121
- package/src/commands/sync/sync.ts +113 -113
- package/src/commands/tcpip.ts +21 -21
- package/src/crypto.ts +285 -280
- package/src/features.ts +5 -5
- package/src/index.ts +10 -10
- package/src/packet.ts +84 -89
- package/src/socket/close-event-emitter.ts +28 -28
- package/src/socket/controller.ts +105 -105
- package/src/socket/data-event-emitter.ts +27 -27
- package/src/socket/dispatcher.ts +269 -269
- package/src/socket/index.ts +6 -6
- package/src/socket/logger.ts +12 -12
- package/src/socket/socket.ts +28 -28
- package/src/stream/buffered-stream.ts +92 -100
- package/src/stream/index.ts +2 -2
- package/src/stream/stream.ts +50 -50
- package/src/utils/auto-reset-event.ts +41 -41
- package/src/utils/base64.ts +274 -274
- package/src/utils/chunk.ts +70 -70
- package/src/utils/encoding.ts +13 -0
- package/src/utils/event-queue.ts +145 -145
- package/src/utils/index.ts +5 -4
- package/cjs/adb.js +0 -205
- package/cjs/adb.js.map +0 -1
- package/cjs/auth.js +0 -141
- package/cjs/auth.js.map +0 -1
- package/cjs/backend.js +0 -3
- package/cjs/backend.js.map +0 -1
- package/cjs/commands/base.js +0 -12
- package/cjs/commands/base.js.map +0 -1
- package/cjs/commands/demo-mode.js +0 -174
- package/cjs/commands/demo-mode.js.map +0 -1
- package/cjs/commands/framebuffer.js +0 -66
- package/cjs/commands/framebuffer.js.map +0 -1
- package/cjs/commands/index.js +0 -12
- package/cjs/commands/index.js.map +0 -1
- package/cjs/commands/install.js +0 -20
- package/cjs/commands/install.js.map +0 -1
- package/cjs/commands/reverse.js +0 -105
- package/cjs/commands/reverse.js.map +0 -1
- package/cjs/commands/shell/index.js +0 -56
- package/cjs/commands/shell/index.js.map +0 -1
- package/cjs/commands/shell/legacy.js +0 -37
- package/cjs/commands/shell/legacy.js.map +0 -1
- package/cjs/commands/shell/protocol.js +0 -83
- package/cjs/commands/shell/protocol.js.map +0 -1
- package/cjs/commands/shell/types.js +0 -3
- package/cjs/commands/shell/types.js.map +0 -1
- package/cjs/commands/shell/utils.js +0 -23
- package/cjs/commands/shell/utils.js.map +0 -1
- package/cjs/commands/sync/index.js +0 -11
- package/cjs/commands/sync/index.js.map +0 -1
- package/cjs/commands/sync/list.js +0 -36
- package/cjs/commands/sync/list.js.map +0 -1
- package/cjs/commands/sync/pull.js +0 -34
- package/cjs/commands/sync/pull.js.map +0 -1
- package/cjs/commands/sync/push.js +0 -49
- package/cjs/commands/sync/push.js.map +0 -1
- package/cjs/commands/sync/request.js +0 -48
- package/cjs/commands/sync/request.js.map +0 -1
- package/cjs/commands/sync/response.js +0 -53
- package/cjs/commands/sync/response.js.map +0 -1
- package/cjs/commands/sync/stat.js +0 -109
- package/cjs/commands/sync/stat.js.map +0 -1
- package/cjs/commands/sync/sync.js +0 -118
- package/cjs/commands/sync/sync.js.map +0 -1
- package/cjs/commands/tcpip.js +0 -28
- package/cjs/commands/tcpip.js.map +0 -1
- package/cjs/crypto.js +0 -231
- package/cjs/crypto.js.map +0 -1
- package/cjs/features.js +0 -10
- package/cjs/features.js.map +0 -1
- package/cjs/index.js +0 -14
- package/cjs/index.js.map +0 -1
- package/cjs/packet.js +0 -77
- package/cjs/packet.js.map +0 -1
- package/cjs/socket/close-event-emitter.js +0 -32
- package/cjs/socket/close-event-emitter.js.map +0 -1
- package/cjs/socket/controller.js +0 -84
- package/cjs/socket/controller.js.map +0 -1
- package/cjs/socket/data-event-emitter.js +0 -29
- package/cjs/socket/data-event-emitter.js.map +0 -1
- package/cjs/socket/dispatcher.js +0 -219
- package/cjs/socket/dispatcher.js.map +0 -1
- package/cjs/socket/index.js +0 -10
- package/cjs/socket/index.js.map +0 -1
- package/cjs/socket/logger.js +0 -3
- package/cjs/socket/logger.js.map +0 -1
- package/cjs/socket/socket.js +0 -24
- package/cjs/socket/socket.js.map +0 -1
- package/cjs/stream/buffered-stream.js +0 -78
- package/cjs/stream/buffered-stream.js.map +0 -1
- package/cjs/stream/index.js +0 -6
- package/cjs/stream/index.js.map +0 -1
- package/cjs/stream/stream.js +0 -45
- package/cjs/stream/stream.js.map +0 -1
- package/cjs/utils/auto-reset-event.js +0 -37
- package/cjs/utils/auto-reset-event.js.map +0 -1
- package/cjs/utils/base64.js +0 -210
- package/cjs/utils/base64.js.map +0 -1
- package/cjs/utils/chunk.js +0 -75
- package/cjs/utils/chunk.js.map +0 -1
- package/cjs/utils/event-queue.js +0 -108
- package/cjs/utils/event-queue.js.map +0 -1
- package/cjs/utils/index.js +0 -8
- package/cjs/utils/index.js.map +0 -1
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.esm.json +0 -28
- package/tsconfig.esm.tsbuildinfo +0 -1305
- package/tsconfig.json +0 -18
|
@@ -1,100 +1,92 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AdbSocket, AdbSocketInfo } from '../socket';
|
|
3
|
-
import { AdbSocketStream } from './stream';
|
|
4
|
-
|
|
5
|
-
export interface Stream {
|
|
6
|
-
/**
|
|
7
|
-
* @param length A hint of how much data should be read.
|
|
8
|
-
* @returns Data, which can be either more or less than `length`
|
|
9
|
-
*/
|
|
10
|
-
read(length: number): ArrayBuffer | Promise<ArrayBuffer>;
|
|
11
|
-
|
|
12
|
-
close?(): void;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export class BufferedStream<T extends Stream> {
|
|
16
|
-
private buffer: Uint8Array | undefined;
|
|
17
|
-
|
|
18
|
-
protected readonly stream: T;
|
|
19
|
-
|
|
20
|
-
public constructor(stream: T) {
|
|
21
|
-
this.stream = stream;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public async read(length: number): Promise<ArrayBuffer> {
|
|
25
|
-
let array: Uint8Array;
|
|
26
|
-
let index: number;
|
|
27
|
-
if (this.buffer) {
|
|
28
|
-
const buffer = this.buffer;
|
|
29
|
-
if (buffer.byteLength > length) {
|
|
30
|
-
this.buffer = buffer.subarray(length);
|
|
31
|
-
return buffer.slice(0, length).buffer;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
array = new Uint8Array(length);
|
|
35
|
-
array.set(buffer);
|
|
36
|
-
index = buffer.byteLength;
|
|
37
|
-
this.buffer = undefined;
|
|
38
|
-
} else {
|
|
39
|
-
const buffer = await this.stream.read(length);
|
|
40
|
-
if (buffer.byteLength === length) {
|
|
41
|
-
return buffer;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (buffer.byteLength > length) {
|
|
45
|
-
this.buffer = new Uint8Array(buffer, length);
|
|
46
|
-
return buffer.slice(0, length);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
array = new Uint8Array(length);
|
|
50
|
-
array.set(new Uint8Array(buffer), 0);
|
|
51
|
-
index = buffer.byteLength;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
while (index < length) {
|
|
55
|
-
const left = length - index;
|
|
56
|
-
|
|
57
|
-
const buffer = await this.stream.read(left);
|
|
58
|
-
if (buffer.byteLength > left) {
|
|
59
|
-
array.set(new Uint8Array(buffer, 0, left), index);
|
|
60
|
-
this.buffer = new Uint8Array(buffer, left);
|
|
61
|
-
return array.buffer;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
array.set(new Uint8Array(buffer), index);
|
|
65
|
-
index += buffer.byteLength;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return array.buffer;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public close() {
|
|
72
|
-
this.stream.close?.();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export class AdbBufferedStream
|
|
77
|
-
extends BufferedStream<AdbSocketStream>
|
|
78
|
-
implements AdbSocketInfo,
|
|
79
|
-
public get backend() { return this.stream.backend; }
|
|
80
|
-
public get localId() { return this.stream.localId; }
|
|
81
|
-
public get remoteId() { return this.stream.remoteId; }
|
|
82
|
-
public get localCreated() { return this.stream.localCreated; }
|
|
83
|
-
public get serviceString() { return this.stream.serviceString; }
|
|
84
|
-
|
|
85
|
-
public constructor(socket: AdbSocket) {
|
|
86
|
-
super(new AdbSocketStream(socket));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public write(data: ArrayBuffer): Promise<void> {
|
|
90
|
-
return this.stream.write(data);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
public decodeUtf8(buffer: ArrayBuffer): string {
|
|
94
|
-
return this.backend.decodeUtf8(buffer);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public encodeUtf8(input: string): ArrayBuffer {
|
|
98
|
-
return this.backend.encodeUtf8(input);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
1
|
+
import { StructAsyncDeserializeStream } from '@yume-chan/struct';
|
|
2
|
+
import { AdbSocket, AdbSocketInfo } from '../socket';
|
|
3
|
+
import { AdbSocketStream } from './stream';
|
|
4
|
+
|
|
5
|
+
export interface Stream {
|
|
6
|
+
/**
|
|
7
|
+
* @param length A hint of how much data should be read.
|
|
8
|
+
* @returns Data, which can be either more or less than `length`
|
|
9
|
+
*/
|
|
10
|
+
read(length: number): ArrayBuffer | Promise<ArrayBuffer>;
|
|
11
|
+
|
|
12
|
+
close?(): void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class BufferedStream<T extends Stream> {
|
|
16
|
+
private buffer: Uint8Array | undefined;
|
|
17
|
+
|
|
18
|
+
protected readonly stream: T;
|
|
19
|
+
|
|
20
|
+
public constructor(stream: T) {
|
|
21
|
+
this.stream = stream;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public async read(length: number): Promise<ArrayBuffer> {
|
|
25
|
+
let array: Uint8Array;
|
|
26
|
+
let index: number;
|
|
27
|
+
if (this.buffer) {
|
|
28
|
+
const buffer = this.buffer;
|
|
29
|
+
if (buffer.byteLength > length) {
|
|
30
|
+
this.buffer = buffer.subarray(length);
|
|
31
|
+
return buffer.slice(0, length).buffer;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
array = new Uint8Array(length);
|
|
35
|
+
array.set(buffer);
|
|
36
|
+
index = buffer.byteLength;
|
|
37
|
+
this.buffer = undefined;
|
|
38
|
+
} else {
|
|
39
|
+
const buffer = await this.stream.read(length);
|
|
40
|
+
if (buffer.byteLength === length) {
|
|
41
|
+
return buffer;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (buffer.byteLength > length) {
|
|
45
|
+
this.buffer = new Uint8Array(buffer, length);
|
|
46
|
+
return buffer.slice(0, length);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
array = new Uint8Array(length);
|
|
50
|
+
array.set(new Uint8Array(buffer), 0);
|
|
51
|
+
index = buffer.byteLength;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
while (index < length) {
|
|
55
|
+
const left = length - index;
|
|
56
|
+
|
|
57
|
+
const buffer = await this.stream.read(left);
|
|
58
|
+
if (buffer.byteLength > left) {
|
|
59
|
+
array.set(new Uint8Array(buffer, 0, left), index);
|
|
60
|
+
this.buffer = new Uint8Array(buffer, left);
|
|
61
|
+
return array.buffer;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
array.set(new Uint8Array(buffer), index);
|
|
65
|
+
index += buffer.byteLength;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return array.buffer;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public close() {
|
|
72
|
+
this.stream.close?.();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export class AdbBufferedStream
|
|
77
|
+
extends BufferedStream<AdbSocketStream>
|
|
78
|
+
implements AdbSocketInfo, StructAsyncDeserializeStream {
|
|
79
|
+
public get backend() { return this.stream.backend; }
|
|
80
|
+
public get localId() { return this.stream.localId; }
|
|
81
|
+
public get remoteId() { return this.stream.remoteId; }
|
|
82
|
+
public get localCreated() { return this.stream.localCreated; }
|
|
83
|
+
public get serviceString() { return this.stream.serviceString; }
|
|
84
|
+
|
|
85
|
+
public constructor(socket: AdbSocket) {
|
|
86
|
+
super(new AdbSocketStream(socket));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public write(data: ArrayBuffer): Promise<void> {
|
|
90
|
+
return this.stream.write(data);
|
|
91
|
+
}
|
|
92
|
+
}
|
package/src/stream/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './buffered-stream';
|
|
2
|
-
export * from './stream';
|
|
1
|
+
export * from './buffered-stream';
|
|
2
|
+
export * from './stream';
|
package/src/stream/stream.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { once } from '@yume-chan/event';
|
|
2
|
-
import { ValueOrPromise } from '@yume-chan/struct';
|
|
3
|
-
import { AdbSocket, AdbSocketInfo } from '../socket';
|
|
4
|
-
import { EventQueue } from '../utils';
|
|
5
|
-
|
|
6
|
-
export class AdbSocketStream implements AdbSocketInfo {
|
|
7
|
-
private socket: AdbSocket;
|
|
8
|
-
|
|
9
|
-
private queue: EventQueue<ArrayBuffer>;
|
|
10
|
-
|
|
11
|
-
public get backend() { return this.socket.backend; }
|
|
12
|
-
public get localId() { return this.socket.localId; }
|
|
13
|
-
public get remoteId() { return this.socket.remoteId; }
|
|
14
|
-
public get localCreated() { return this.socket.localCreated; }
|
|
15
|
-
public get serviceString() { return this.socket.serviceString; }
|
|
16
|
-
|
|
17
|
-
public constructor(socket: AdbSocket) {
|
|
18
|
-
this.socket = socket;
|
|
19
|
-
|
|
20
|
-
this.queue = new EventQueue<ArrayBuffer>({
|
|
21
|
-
highWaterMark: 16 * 1024,
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
this.socket.onData((buffer): ValueOrPromise<void> => {
|
|
25
|
-
if (!this.queue.enqueue(buffer, buffer.byteLength)) {
|
|
26
|
-
return once(this.queue.onDrain);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
this.socket.onClose(() => {
|
|
31
|
-
this.queue.end();
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public async read(): Promise<ArrayBuffer> {
|
|
36
|
-
try {
|
|
37
|
-
return await this.queue.dequeue();
|
|
38
|
-
} catch {
|
|
39
|
-
throw new Error('Can not read after AdbSocketStream has been closed');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public write(data: ArrayBuffer): Promise<void> {
|
|
44
|
-
return this.socket.write(data);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
close(): void {
|
|
48
|
-
this.socket.close();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
import { once } from '@yume-chan/event';
|
|
2
|
+
import { ValueOrPromise } from '@yume-chan/struct';
|
|
3
|
+
import { AdbSocket, AdbSocketInfo } from '../socket';
|
|
4
|
+
import { EventQueue } from '../utils';
|
|
5
|
+
|
|
6
|
+
export class AdbSocketStream implements AdbSocketInfo {
|
|
7
|
+
private socket: AdbSocket;
|
|
8
|
+
|
|
9
|
+
private queue: EventQueue<ArrayBuffer>;
|
|
10
|
+
|
|
11
|
+
public get backend() { return this.socket.backend; }
|
|
12
|
+
public get localId() { return this.socket.localId; }
|
|
13
|
+
public get remoteId() { return this.socket.remoteId; }
|
|
14
|
+
public get localCreated() { return this.socket.localCreated; }
|
|
15
|
+
public get serviceString() { return this.socket.serviceString; }
|
|
16
|
+
|
|
17
|
+
public constructor(socket: AdbSocket) {
|
|
18
|
+
this.socket = socket;
|
|
19
|
+
|
|
20
|
+
this.queue = new EventQueue<ArrayBuffer>({
|
|
21
|
+
highWaterMark: 16 * 1024,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
this.socket.onData((buffer): ValueOrPromise<void> => {
|
|
25
|
+
if (!this.queue.enqueue(buffer, buffer.byteLength)) {
|
|
26
|
+
return once(this.queue.onDrain);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
this.socket.onClose(() => {
|
|
31
|
+
this.queue.end();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public async read(): Promise<ArrayBuffer> {
|
|
36
|
+
try {
|
|
37
|
+
return await this.queue.dequeue();
|
|
38
|
+
} catch {
|
|
39
|
+
throw new Error('Can not read after AdbSocketStream has been closed');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public write(data: ArrayBuffer): Promise<void> {
|
|
44
|
+
return this.socket.write(data);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
close(): void {
|
|
48
|
+
this.socket.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { PromiseResolver } from '@yume-chan/async';
|
|
2
|
-
import { Disposable } from '@yume-chan/event';
|
|
3
|
-
|
|
4
|
-
export class AutoResetEvent implements Disposable {
|
|
5
|
-
private readonly list: PromiseResolver<void>[] = [];
|
|
6
|
-
|
|
7
|
-
private blocking: boolean;
|
|
8
|
-
|
|
9
|
-
public constructor(initialSet = false) {
|
|
10
|
-
this.blocking = initialSet;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
public wait(): Promise<void> {
|
|
14
|
-
if (!this.blocking) {
|
|
15
|
-
this.blocking = true;
|
|
16
|
-
|
|
17
|
-
if (this.list.length === 0) {
|
|
18
|
-
return Promise.resolve();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const resolver = new PromiseResolver<void>();
|
|
23
|
-
this.list.push(resolver);
|
|
24
|
-
return resolver.promise;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public notify() {
|
|
28
|
-
if (this.list.length !== 0) {
|
|
29
|
-
this.list.pop()!.resolve();
|
|
30
|
-
} else {
|
|
31
|
-
this.blocking = false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public dispose() {
|
|
36
|
-
for (const item of this.list) {
|
|
37
|
-
item.reject(new Error('The AutoResetEvent has been disposed'));
|
|
38
|
-
}
|
|
39
|
-
this.list.length = 0;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
1
|
+
import { PromiseResolver } from '@yume-chan/async';
|
|
2
|
+
import { Disposable } from '@yume-chan/event';
|
|
3
|
+
|
|
4
|
+
export class AutoResetEvent implements Disposable {
|
|
5
|
+
private readonly list: PromiseResolver<void>[] = [];
|
|
6
|
+
|
|
7
|
+
private blocking: boolean;
|
|
8
|
+
|
|
9
|
+
public constructor(initialSet = false) {
|
|
10
|
+
this.blocking = initialSet;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public wait(): Promise<void> {
|
|
14
|
+
if (!this.blocking) {
|
|
15
|
+
this.blocking = true;
|
|
16
|
+
|
|
17
|
+
if (this.list.length === 0) {
|
|
18
|
+
return Promise.resolve();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const resolver = new PromiseResolver<void>();
|
|
23
|
+
this.list.push(resolver);
|
|
24
|
+
return resolver.promise;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public notify() {
|
|
28
|
+
if (this.list.length !== 0) {
|
|
29
|
+
this.list.pop()!.resolve();
|
|
30
|
+
} else {
|
|
31
|
+
this.blocking = false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public dispose() {
|
|
36
|
+
for (const item of this.list) {
|
|
37
|
+
item.reject(new Error('The AutoResetEvent has been disposed'));
|
|
38
|
+
}
|
|
39
|
+
this.list.length = 0;
|
|
40
|
+
}
|
|
41
|
+
}
|