@yume-chan/scrcpy 0.0.14 → 0.0.15

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 (51) hide show
  1. package/CHANGELOG.json +15 -0
  2. package/CHANGELOG.md +9 -1
  3. package/esm/client.d.ts +14 -2
  4. package/esm/client.d.ts.map +1 -1
  5. package/esm/client.js +275 -143
  6. package/esm/client.js.map +1 -1
  7. package/esm/connection.js +74 -85
  8. package/esm/connection.js.map +1 -1
  9. package/esm/decoder/tinyh264/index.js +48 -48
  10. package/esm/decoder/tinyh264/index.js.map +1 -1
  11. package/esm/decoder/tinyh264/wrapper.js +3 -2
  12. package/esm/decoder/tinyh264/wrapper.js.map +1 -1
  13. package/esm/decoder/web-codecs/index.js +26 -21
  14. package/esm/decoder/web-codecs/index.js.map +1 -1
  15. package/esm/message.d.ts +12 -8
  16. package/esm/message.d.ts.map +1 -1
  17. package/esm/message.js +13 -8
  18. package/esm/message.js.map +1 -1
  19. package/esm/options/1_16/index.d.ts +5 -4
  20. package/esm/options/1_16/index.d.ts.map +1 -1
  21. package/esm/options/1_16/index.js +33 -17
  22. package/esm/options/1_16/index.js.map +1 -1
  23. package/esm/options/1_16/sps.js +3 -2
  24. package/esm/options/1_16/sps.js.map +1 -1
  25. package/esm/options/1_18.d.ts +3 -2
  26. package/esm/options/1_18.d.ts.map +1 -1
  27. package/esm/options/1_18.js +24 -1
  28. package/esm/options/1_18.js.map +1 -1
  29. package/esm/options/1_21.js +4 -1
  30. package/esm/options/1_21.js.map +1 -1
  31. package/esm/options/1_22.d.ts +3 -3
  32. package/esm/options/1_22.d.ts.map +1 -1
  33. package/esm/options/1_22.js +9 -6
  34. package/esm/options/1_22.js.map +1 -1
  35. package/esm/options/1_23.js +4 -1
  36. package/esm/options/1_23.js.map +1 -1
  37. package/esm/options/1_24.js +4 -1
  38. package/esm/options/1_24.js.map +1 -1
  39. package/esm/options/common.d.ts +2 -0
  40. package/esm/options/common.d.ts.map +1 -1
  41. package/esm/options/common.js.map +1 -1
  42. package/esm/push-server.js +5 -10
  43. package/esm/push-server.js.map +1 -1
  44. package/package.json +4 -4
  45. package/src/client.ts +181 -21
  46. package/src/connection.ts +1 -1
  47. package/src/message.ts +10 -3
  48. package/src/options/1_16/index.ts +25 -10
  49. package/src/options/1_18.ts +21 -1
  50. package/src/options/1_22.ts +6 -8
  51. package/src/options/common.ts +3 -0
package/CHANGELOG.json CHANGED
@@ -1,6 +1,21 @@
1
1
  {
2
2
  "name": "@yume-chan/scrcpy",
3
3
  "entries": [
4
+ {
5
+ "version": "0.0.15",
6
+ "tag": "@yume-chan/scrcpy_v0.0.15",
7
+ "date": "Mon, 02 May 2022 04:18:01 GMT",
8
+ "comments": {
9
+ "none": [
10
+ {
11
+ "comment": "Add support for `rotateDevice` control message"
12
+ },
13
+ {
14
+ "comment": "Add method to get screen list"
15
+ }
16
+ ]
17
+ }
18
+ },
4
19
  {
5
20
  "version": "0.0.14",
6
21
  "tag": "@yume-chan/scrcpy_v0.0.14",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Change Log - @yume-chan/scrcpy
2
2
 
3
- This log was last generated on Sat, 30 Apr 2022 14:05:48 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 02 May 2022 04:18:01 GMT and should not be manually modified.
4
+
5
+ ## 0.0.15
6
+ Mon, 02 May 2022 04:18:01 GMT
7
+
8
+ ### Updates
9
+
10
+ - Add support for `rotateDevice` control message
11
+ - Add method to get screen list
4
12
 
5
13
  ## 0.0.14
6
14
  Sat, 30 Apr 2022 14:05:48 GMT
package/esm/client.d.ts CHANGED
@@ -1,8 +1,17 @@
1
- import { type Adb, type AdbSocket, type AdbSubprocessProtocol, type ReadableStream } from '@yume-chan/adb';
1
+ import { ReadableStream, type Adb, type AdbSocket, type AdbSubprocessProtocol } from '@yume-chan/adb';
2
2
  import { ScrcpyInjectKeyCodeControlMessage, ScrcpyInjectTouchControlMessage, type AndroidKeyEventAction } from './message.js';
3
3
  import type { ScrcpyInjectScrollControlMessage1_22, ScrcpyOptions, VideoStreamPacket } from "./options/index.js";
4
4
  export declare class ScrcpyClient {
5
+ /**
6
+ * This method will modify the given `options`,
7
+ * so don't reuse it elsewhere.
8
+ */
5
9
  static getEncoders(adb: Adb, path: string, version: string, options: ScrcpyOptions<any>): Promise<string[]>;
10
+ /**
11
+ * This method will modify the given `options`,
12
+ * so don't reuse it elsewhere.
13
+ */
14
+ static getDisplays(adb: Adb, path: string, version: string, options: ScrcpyOptions<any>): Promise<number[]>;
6
15
  static start(adb: Adb, path: string, version: string, options: ScrcpyOptions<any>): Promise<ScrcpyClient>;
7
16
  private _adb;
8
17
  get adb(): Adb;
@@ -24,13 +33,16 @@ export declare class ScrcpyClient {
24
33
  <TThis, TArgs extends unknown[]>(listener: import("@yume-chan/event").EventListener<string, TThis, TArgs, unknown>, thisArg: TThis, ...args: TArgs): import("@yume-chan/event").RemoveEventListener;
25
34
  };
26
35
  private lastTouchMessage;
27
- constructor(adb: Adb, options: ScrcpyOptions<any>, process: AdbSubprocessProtocol, videoStream: AdbSocket, controlStream: AdbSocket | undefined);
36
+ constructor(adb: Adb, options: ScrcpyOptions<any>, process: AdbSubprocessProtocol, stdout: ReadableStream<string>, videoStream: AdbSocket, controlStream: AdbSocket | undefined);
28
37
  private checkControlStream;
38
+ private getControlMessageTypeValue;
29
39
  injectKeyCode(message: Omit<ScrcpyInjectKeyCodeControlMessage, 'type'>): Promise<void>;
30
40
  injectText(text: string): Promise<void>;
31
41
  injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, 'type' | 'screenWidth' | 'screenHeight'>): Promise<void>;
32
42
  injectScroll(message: Omit<ScrcpyInjectScrollControlMessage1_22, 'type' | 'screenWidth' | 'screenHeight'>): Promise<void>;
33
43
  pressBackOrTurnOnScreen(action: AndroidKeyEventAction): Promise<void>;
44
+ private sendSimpleControlMessage;
45
+ rotateDevice(): Promise<void>;
34
46
  close(): Promise<void>;
35
47
  }
36
48
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkH,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAoC,MAAM,gBAAgB,CAAC;AAG7P,OAAO,EAAsD,iCAAiC,EAAkC,+BAA+B,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAClN,OAAO,KAAK,EAAE,oCAAoC,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAuBjH,qBAAa,YAAY;WACD,WAAW,CAC3B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;WAyBA,KAAK,CACrB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC;IA4C/B,OAAO,CAAC,IAAI,CAAM;IAClB,IAAW,GAAG,QAAwB;IAEtC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,OAAO,CAAyB;IACxC,IAAW,MAAM,2BAA2B;IAE5C,IAAW,IAAI,oBAAgC;IAE/C,OAAO,CAAC,YAAY,CAAqB;IACzC,IAAW,WAAW,uBAAgC;IAEtD,OAAO,CAAC,aAAa,CAAqB;IAC1C,IAAW,YAAY,uBAAiC;IAExD,OAAO,CAAC,YAAY,CAAoC;IACxD,IAAW,WAAW,sCAAgC;IAEtD,OAAO,CAAC,oBAAoB,CAAsD;IAElF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8B;IACnE,IAAW,iBAAiB;;;MAA8C;IAE1E,OAAO,CAAC,gBAAgB,CAAK;gBAGzB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,SAAS,GAAG,SAAS;IAmDxC,OAAO,CAAC,kBAAkB;IAQb,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC;IAStE,UAAU,CAAC,IAAI,EAAE,MAAM;IASvB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;IA2BnG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,oCAAoC,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;IAgBzG,uBAAuB,CAAC,MAAM,EAAE,qBAAqB;IAYrD,KAAK;CAIrB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkG,cAAc,EAAmC,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAoC,MAAM,gBAAgB,CAAC;AAGzQ,OAAO,EAAsD,iCAAiC,EAAkC,+BAA+B,EAA8B,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC9O,OAAO,KAAK,EAAE,oCAAoC,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA8FjH,qBAAa,YAAY;IACrB;;;OAGG;WACiB,WAAW,CAC3B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;IA2BpB;;;OAGG;WACiB,WAAW,CAC3B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;WA8BA,KAAK,CACrB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC;IA6E/B,OAAO,CAAC,IAAI,CAAM;IAClB,IAAW,GAAG,QAAwB;IAEtC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,OAAO,CAAyB;IACxC,IAAW,MAAM,2BAA2B;IAE5C,IAAW,IAAI,oBAAgC;IAE/C,OAAO,CAAC,YAAY,CAAqB;IACzC,IAAW,WAAW,uBAAgC;IAEtD,OAAO,CAAC,aAAa,CAAqB;IAC1C,IAAW,YAAY,uBAAiC;IAExD,OAAO,CAAC,YAAY,CAAoC;IACxD,IAAW,WAAW,sCAAgC;IAEtD,OAAO,CAAC,oBAAoB,CAAsD;IAElF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8B;IACnE,IAAW,iBAAiB;;;MAA8C;IAE1E,OAAO,CAAC,gBAAgB,CAAK;gBAGzB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,SAAS,GAAG,SAAS;IAwCxC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,0BAA0B;IASrB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC;IAStE,UAAU,CAAC,IAAI,EAAE,MAAM;IASvB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;IA2BnG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,oCAAoC,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;IAgBzG,uBAAuB,CAAC,MAAM,EAAE,qBAAqB;YAYpD,wBAAwB;IAQzB,YAAY;IAIZ,KAAK;CAIrB"}
package/esm/client.js CHANGED
@@ -1,8 +1,7 @@
1
- import { __awaiter } from "tslib";
2
- import { AdbBufferedStream, AdbSubprocessNoneProtocol, DecodeUtf8Stream, InspectStream, TransformStream, WritableStream } from '@yume-chan/adb';
1
+ import { AbortController, AdbBufferedStream, AdbSubprocessNoneProtocol, DecodeUtf8Stream, InspectStream, ReadableStream, TransformStream, WritableStream } from '@yume-chan/adb';
3
2
  import { EventEmitter } from '@yume-chan/event';
4
3
  import Struct from '@yume-chan/struct';
5
- import { AndroidMotionEventAction, ScrcpyControlMessageType, ScrcpyInjectKeyCodeControlMessage, ScrcpyInjectTextControlMessage, ScrcpyInjectTouchControlMessage } from './message.js';
4
+ import { AndroidMotionEventAction, ScrcpyControlMessageType, ScrcpyInjectKeyCodeControlMessage, ScrcpyInjectTextControlMessage, ScrcpyInjectTouchControlMessage, ScrcpySimpleControlMessage } from './message.js';
6
5
  function* splitLines(text) {
7
6
  let start = 0;
8
7
  while (true) {
@@ -15,19 +14,9 @@ function* splitLines(text) {
15
14
  start = index + 1;
16
15
  }
17
16
  }
18
- const ClipboardMessage = new Struct()
19
- .uint32('length')
20
- .string('content', { lengthField: 'length' });
21
- export class ScrcpyClient {
22
- constructor(adb, options, process, videoStream, controlStream) {
23
- this.clipboardChangeEvent = new EventEmitter();
24
- this.lastTouchMessage = 0;
25
- this._adb = adb;
26
- this.options = options;
27
- this.process = process;
28
- this._stdout = process.stdout
29
- .pipeThrough(new DecodeUtf8Stream())
30
- .pipeThrough(new TransformStream({
17
+ class SplitLinesStream extends TransformStream {
18
+ constructor() {
19
+ super({
31
20
  transform(chunk, controller) {
32
21
  for (const line of splitLines(chunk)) {
33
22
  if (line === '') {
@@ -36,7 +25,200 @@ export class ScrcpyClient {
36
25
  controller.enqueue(line);
37
26
  }
38
27
  },
28
+ });
29
+ }
30
+ }
31
+ class ArrayToStream extends ReadableStream {
32
+ array;
33
+ index = 0;
34
+ constructor(array) {
35
+ super({
36
+ start: async () => {
37
+ await Promise.resolve();
38
+ this.array = array;
39
+ },
40
+ pull: (controller) => {
41
+ if (this.index < this.array.length) {
42
+ controller.enqueue(this.array[this.index]);
43
+ this.index += 1;
44
+ }
45
+ else {
46
+ controller.close();
47
+ }
48
+ },
49
+ });
50
+ }
51
+ }
52
+ class ConcatStream extends ReadableStream {
53
+ streams;
54
+ index = 0;
55
+ reader;
56
+ constructor(...streams) {
57
+ super({
58
+ start: async (controller) => {
59
+ await Promise.resolve();
60
+ this.streams = streams;
61
+ this.advance(controller);
62
+ },
63
+ pull: async (controller) => {
64
+ const result = await this.reader.read();
65
+ if (!result.done) {
66
+ controller.enqueue(result.value);
67
+ return;
68
+ }
69
+ this.advance(controller);
70
+ }
71
+ });
72
+ }
73
+ advance(controller) {
74
+ if (this.index < this.streams.length) {
75
+ this.reader = this.streams[this.index].getReader();
76
+ this.index += 1;
77
+ }
78
+ else {
79
+ controller.close();
80
+ }
81
+ }
82
+ }
83
+ const ClipboardMessage = new Struct()
84
+ .uint32('length')
85
+ .string('content', { lengthField: 'length' });
86
+ export class ScrcpyClient {
87
+ /**
88
+ * This method will modify the given `options`,
89
+ * so don't reuse it elsewhere.
90
+ */
91
+ static async getEncoders(adb, path, version, options) {
92
+ // Provide an invalid encoder name
93
+ // So the server will return all available encoders
94
+ options.value.encoderName = '_';
95
+ // Disable control for faster connection in 1.22+
96
+ options.value.control = false;
97
+ options.value.sendDeviceMeta = false;
98
+ options.value.sendDummyByte = false;
99
+ // Scrcpy server will open connections, before initializing encoder
100
+ // Thus although an invalid encoder name is given, the start process will success
101
+ const client = await ScrcpyClient.start(adb, path, version, options);
102
+ const encoderNameRegex = options.getOutputEncoderNameRegex();
103
+ const encoders = [];
104
+ await client.stdout.pipeTo(new WritableStream({
105
+ write(line) {
106
+ const match = line.match(encoderNameRegex);
107
+ if (match) {
108
+ encoders.push(match[1]);
109
+ }
110
+ },
39
111
  }));
112
+ return encoders;
113
+ }
114
+ /**
115
+ * This method will modify the given `options`,
116
+ * so don't reuse it elsewhere.
117
+ */
118
+ static async getDisplays(adb, path, version, options) {
119
+ // Similar to `getEncoders`, pass an invalid option and parse the output
120
+ options.value.displayId = -1;
121
+ options.value.control = false;
122
+ options.value.sendDeviceMeta = false;
123
+ options.value.sendDummyByte = false;
124
+ try {
125
+ // Server will exit before opening connections when an invalid display id was given.
126
+ await ScrcpyClient.start(adb, path, version, options);
127
+ }
128
+ catch (e) {
129
+ if (e instanceof Error) {
130
+ const output = e.output;
131
+ const displayIdRegex = /\s+scrcpy --display (\d+)/;
132
+ const displays = [];
133
+ for (const line of output) {
134
+ const match = line.match(displayIdRegex);
135
+ if (match) {
136
+ displays.push(Number.parseInt(match[1], 10));
137
+ }
138
+ }
139
+ return displays;
140
+ }
141
+ }
142
+ throw new Error('failed to get displays');
143
+ }
144
+ static async start(adb, path, version, options) {
145
+ const connection = options.createConnection(adb);
146
+ let process;
147
+ try {
148
+ await connection.initialize();
149
+ process = await adb.subprocess.spawn([
150
+ // cspell: disable-next-line
151
+ `CLASSPATH=${path}`,
152
+ 'app_process',
153
+ /* unused */ '/',
154
+ 'com.genymobile.scrcpy.Server',
155
+ version,
156
+ ...options.formatServerArguments(),
157
+ ], {
158
+ // Scrcpy server doesn't split stdout and stderr,
159
+ // so disable Shell Protocol to simplify processing
160
+ protocols: [AdbSubprocessNoneProtocol],
161
+ });
162
+ const stdout = process.stdout
163
+ .pipeThrough(new DecodeUtf8Stream())
164
+ .pipeThrough(new SplitLinesStream());
165
+ // Read stdout, otherwise `process.exit` won't resolve.
166
+ const output = [];
167
+ const abortController = new AbortController();
168
+ const pipe = stdout
169
+ .pipeTo(new WritableStream({
170
+ write(chunk) {
171
+ output.push(chunk);
172
+ }
173
+ }), {
174
+ signal: abortController.signal,
175
+ preventCancel: true,
176
+ })
177
+ .catch(() => { });
178
+ const result = await Promise.race([
179
+ process.exit,
180
+ connection.getStreams(),
181
+ ]);
182
+ if (typeof result === 'number') {
183
+ const error = new Error('scrcpy server exited prematurely');
184
+ error.output = output;
185
+ throw error;
186
+ }
187
+ abortController.abort();
188
+ await pipe;
189
+ const [videoStream, controlStream] = result;
190
+ return new ScrcpyClient(adb, options, process, new ConcatStream(new ArrayToStream(output), stdout), videoStream, controlStream);
191
+ }
192
+ catch (e) {
193
+ await process?.kill();
194
+ throw e;
195
+ }
196
+ finally {
197
+ connection.dispose();
198
+ }
199
+ }
200
+ _adb;
201
+ get adb() { return this._adb; }
202
+ options;
203
+ process;
204
+ _stdout;
205
+ get stdout() { return this._stdout; }
206
+ get exit() { return this.process.exit; }
207
+ _screenWidth;
208
+ get screenWidth() { return this._screenWidth; }
209
+ _screenHeight;
210
+ get screenHeight() { return this._screenHeight; }
211
+ _videoStream;
212
+ get videoStream() { return this._videoStream; }
213
+ _controlStreamWriter;
214
+ clipboardChangeEvent = new EventEmitter();
215
+ get onClipboardChange() { return this.clipboardChangeEvent.event; }
216
+ lastTouchMessage = 0;
217
+ constructor(adb, options, process, stdout, videoStream, controlStream) {
218
+ this._adb = adb;
219
+ this.options = options;
220
+ this.process = process;
221
+ this._stdout = stdout;
40
222
  this._videoStream = videoStream.readable
41
223
  .pipeThrough(options.createVideoStreamTransformer())
42
224
  .pipeThrough(new InspectStream(packet => {
@@ -48,13 +230,13 @@ export class ScrcpyClient {
48
230
  if (controlStream) {
49
231
  const buffered = new AdbBufferedStream(controlStream);
50
232
  this._controlStreamWriter = controlStream.writable.getWriter();
51
- (() => __awaiter(this, void 0, void 0, function* () {
233
+ (async () => {
52
234
  try {
53
235
  while (true) {
54
- const type = yield buffered.read(1);
236
+ const type = await buffered.read(1);
55
237
  switch (type[0]) {
56
238
  case 0:
57
- const { content } = yield ClipboardMessage.deserialize(buffered);
239
+ const { content } = await ClipboardMessage.deserialize(buffered);
58
240
  this.clipboardChangeEvent.fire(content);
59
241
  break;
60
242
  default:
@@ -62,148 +244,98 @@ export class ScrcpyClient {
62
244
  }
63
245
  }
64
246
  }
65
- catch (_a) {
247
+ catch {
66
248
  // TODO: Scrcpy: handle error
67
249
  }
68
- }))();
250
+ })();
69
251
  }
70
252
  }
71
- static getEncoders(adb, path, version, options) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- // Provide an invalid encoder name
74
- // So the server will return all available encoders
75
- options.value.encoderName = '_';
76
- // Disable control for faster connection in 1.22+
77
- options.value.control = false;
78
- // Scrcpy server will open connections, before initializing encoder
79
- // Thus although an invalid encoder name is given, the start process will success
80
- const client = yield ScrcpyClient.start(adb, path, version, options);
81
- const encoderNameRegex = options.getOutputEncoderNameRegex();
82
- const encoders = [];
83
- yield client.stdout.pipeTo(new WritableStream({
84
- write(line) {
85
- const match = line.match(encoderNameRegex);
86
- if (match) {
87
- encoders.push(match[1]);
88
- }
89
- },
90
- }));
91
- return encoders;
92
- });
93
- }
94
- static start(adb, path, version, options) {
95
- return __awaiter(this, void 0, void 0, function* () {
96
- const connection = options.createConnection(adb);
97
- let process;
98
- try {
99
- yield connection.initialize();
100
- process = yield adb.subprocess.spawn([
101
- // cspell: disable-next-line
102
- `CLASSPATH=${path}`,
103
- 'app_process',
104
- /* unused */ '/',
105
- 'com.genymobile.scrcpy.Server',
106
- version,
107
- ...options.formatServerArguments(),
108
- ], {
109
- // Scrcpy server doesn't split stdout and stderr,
110
- // so disable Shell Protocol to simplify processing
111
- protocols: [AdbSubprocessNoneProtocol],
112
- });
113
- const result = yield Promise.race([
114
- process.exit,
115
- connection.getStreams(),
116
- ]);
117
- if (typeof result === 'number') {
118
- throw new Error('scrcpy server exited prematurely');
119
- }
120
- const [videoStream, controlStream] = result;
121
- return new ScrcpyClient(adb, options, process, videoStream, controlStream);
122
- }
123
- catch (e) {
124
- yield (process === null || process === void 0 ? void 0 : process.kill());
125
- throw e;
126
- }
127
- finally {
128
- connection.dispose();
129
- }
130
- });
131
- }
132
- get adb() { return this._adb; }
133
- get stdout() { return this._stdout; }
134
- get exit() { return this.process.exit; }
135
- get screenWidth() { return this._screenWidth; }
136
- get screenHeight() { return this._screenHeight; }
137
- get videoStream() { return this._videoStream; }
138
- get onClipboardChange() { return this.clipboardChangeEvent.event; }
139
253
  checkControlStream(caller) {
140
254
  if (!this._controlStreamWriter) {
141
255
  throw new Error(`${caller} called with control disabled`);
142
256
  }
143
257
  return this._controlStreamWriter;
144
258
  }
145
- injectKeyCode(message) {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- const controlStream = this.checkControlStream('injectKeyCode');
148
- yield controlStream.write(ScrcpyInjectKeyCodeControlMessage.serialize(Object.assign(Object.assign({}, message), { type: ScrcpyControlMessageType.InjectKeycode })));
149
- });
259
+ getControlMessageTypeValue(type) {
260
+ const list = this.options.getControlMessageTypes();
261
+ const index = list.indexOf(type);
262
+ if (index === -1) {
263
+ throw new Error('Not supported');
264
+ }
265
+ return index;
150
266
  }
151
- injectText(text) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- const controlStream = this.checkControlStream('injectText');
154
- yield controlStream.write(ScrcpyInjectTextControlMessage.serialize({
155
- type: ScrcpyControlMessageType.InjectText,
156
- text,
157
- }));
158
- });
267
+ async injectKeyCode(message) {
268
+ const controlStream = this.checkControlStream('injectKeyCode');
269
+ await controlStream.write(ScrcpyInjectKeyCodeControlMessage.serialize({
270
+ ...message,
271
+ type: this.getControlMessageTypeValue(ScrcpyControlMessageType.InjectKeycode),
272
+ }));
159
273
  }
160
- injectTouch(message) {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- const controlStream = this.checkControlStream('injectTouch');
163
- if (!this.screenWidth || !this.screenHeight) {
164
- return;
165
- }
166
- // ADB streams are actually pretty low-bandwidth and laggy
167
- // Re-sample move events to avoid flooding the connection
168
- // TODO: Scrcpy: investigate how to throttle touch events
169
- // because 60FPS may still be too high
170
- const now = Date.now();
171
- if (now - this.lastTouchMessage < 16 &&
172
- [AndroidMotionEventAction.Move, AndroidMotionEventAction.HoverMove].includes(message.action)) {
173
- return;
174
- }
175
- this.lastTouchMessage = now;
176
- yield controlStream.write(ScrcpyInjectTouchControlMessage.serialize(Object.assign(Object.assign({}, message), { type: ScrcpyControlMessageType.InjectTouch, screenWidth: this.screenWidth, screenHeight: this.screenHeight })));
177
- });
274
+ async injectText(text) {
275
+ const controlStream = this.checkControlStream('injectText');
276
+ await controlStream.write(ScrcpyInjectTextControlMessage.serialize({
277
+ type: this.getControlMessageTypeValue(ScrcpyControlMessageType.InjectText),
278
+ text,
279
+ }));
178
280
  }
179
- injectScroll(message) {
180
- return __awaiter(this, void 0, void 0, function* () {
181
- const controlStream = this.checkControlStream('injectScroll');
182
- if (!this.screenWidth || !this.screenHeight) {
183
- return;
184
- }
185
- const buffer = this.options.serializeInjectScrollControlMessage(Object.assign(Object.assign({}, message), { type: ScrcpyControlMessageType.InjectScroll, screenWidth: this.screenWidth, screenHeight: this.screenHeight }));
186
- yield controlStream.write(buffer);
281
+ async injectTouch(message) {
282
+ const controlStream = this.checkControlStream('injectTouch');
283
+ if (!this.screenWidth || !this.screenHeight) {
284
+ return;
285
+ }
286
+ // ADB streams are actually pretty low-bandwidth and laggy
287
+ // Re-sample move events to avoid flooding the connection
288
+ // TODO: Scrcpy: investigate how to throttle touch events
289
+ // because 60FPS may still be too high
290
+ const now = Date.now();
291
+ if (now - this.lastTouchMessage < 16 &&
292
+ [AndroidMotionEventAction.Move, AndroidMotionEventAction.HoverMove].includes(message.action)) {
293
+ return;
294
+ }
295
+ this.lastTouchMessage = now;
296
+ await controlStream.write(ScrcpyInjectTouchControlMessage.serialize({
297
+ ...message,
298
+ type: this.getControlMessageTypeValue(ScrcpyControlMessageType.InjectTouch),
299
+ screenWidth: this.screenWidth,
300
+ screenHeight: this.screenHeight,
301
+ }));
302
+ }
303
+ async injectScroll(message) {
304
+ const controlStream = this.checkControlStream('injectScroll');
305
+ if (!this.screenWidth || !this.screenHeight) {
306
+ return;
307
+ }
308
+ const buffer = this.options.serializeInjectScrollControlMessage({
309
+ ...message,
310
+ type: this.getControlMessageTypeValue(ScrcpyControlMessageType.InjectScroll),
311
+ screenWidth: this.screenWidth,
312
+ screenHeight: this.screenHeight,
187
313
  });
314
+ await controlStream.write(buffer);
188
315
  }
189
- pressBackOrTurnOnScreen(action) {
190
- return __awaiter(this, void 0, void 0, function* () {
191
- const controlStream = this.checkControlStream('pressBackOrTurnOnScreen');
192
- const buffer = this.options.serializeBackOrScreenOnControlMessage({
193
- type: ScrcpyControlMessageType.BackOrScreenOn,
194
- action,
195
- });
196
- if (buffer) {
197
- yield controlStream.write(buffer);
198
- }
316
+ async pressBackOrTurnOnScreen(action) {
317
+ const controlStream = this.checkControlStream('pressBackOrTurnOnScreen');
318
+ const buffer = this.options.serializeBackOrScreenOnControlMessage({
319
+ type: this.getControlMessageTypeValue(ScrcpyControlMessageType.BackOrScreenOn),
320
+ action,
199
321
  });
322
+ if (buffer) {
323
+ await controlStream.write(buffer);
324
+ }
200
325
  }
201
- close() {
202
- var _a;
203
- return __awaiter(this, void 0, void 0, function* () {
204
- // No need to close streams. Kill the process will destroy them from the other side.
205
- yield ((_a = this.process) === null || _a === void 0 ? void 0 : _a.kill());
326
+ async sendSimpleControlMessage(type, name) {
327
+ const controlStream = this.checkControlStream(name);
328
+ const buffer = ScrcpySimpleControlMessage.serialize({
329
+ type: this.getControlMessageTypeValue(type),
206
330
  });
331
+ await controlStream.write(buffer);
332
+ }
333
+ async rotateDevice() {
334
+ await this.sendSimpleControlMessage(ScrcpyControlMessageType.RotateDevice, 'rotateDevice');
335
+ }
336
+ async close() {
337
+ // No need to close streams. Kill the process will destroy them from the other side.
338
+ await this.process?.kill();
207
339
  }
208
340
  }
209
341
  //# sourceMappingURL=client.js.map
package/esm/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}