@aiscene/aiserver 1.9.6 → 1.9.7

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,10 @@ export declare class ScrcpyServer {
66
66
  private currentDeviceId;
67
67
  private devicePollInterval;
68
68
  private lastDeviceListJson;
69
+ private lastDeviceList;
70
+ private lastDeviceListAt;
71
+ private deviceListInFlight;
72
+ private deviceConnectLocks;
69
73
  private serverBinPath;
70
74
  private started;
71
75
  private projectionBlockedDevices;
@@ -74,7 +78,10 @@ export declare class ScrcpyServer {
74
78
  constructor(config: ScrcpyConfig);
75
79
  private handleHttpRequest;
76
80
  private getAdbClient;
81
+ private loadDevicesListFromAdb;
77
82
  private getDevicesList;
83
+ private selectAvailableDeviceId;
84
+ private isSessionOpen;
78
85
  private isProjectionBlocked;
79
86
  private getProjectionBlockedMessage;
80
87
  private getAdb;
@@ -89,6 +96,7 @@ export declare class ScrcpyServer {
89
96
  private sendDevicesListTo;
90
97
  /** 释放 session 持有的 scrcpy 资源(reader + client),用于断开/切换 */
91
98
  private releaseSession;
99
+ private connectDeviceForSession;
92
100
  private attachSocketHandlers;
93
101
  private startDeviceMonitoring;
94
102
  start(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsBxD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAiGD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,wBAAwB,CAAkC;IAClE,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAiD;gBAErD,MAAM,EAAE,YAAY;YAoBlB,iBAAiB;YA6CjB,YAAY;YA2BZ,cAAc;IAuB5B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,2BAA2B;YAOrB,MAAM;YA4CN,gBAAgB;YA2BhB,WAAW;IAwEzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,4BAA4B;YA0BtB,0BAA0B;YAoB1B,kBAAkB;IAShC,OAAO,CAAC,sBAAsB;YAyBhB,iBAAiB;IAgB/B,wDAAwD;YAC1C,cAAc;IAqB5B,OAAO,CAAC,oBAAoB;IAmrB5B,OAAO,CAAC,qBAAqB;IAYvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B7B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsBxD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAmGD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,wBAAwB,CAAkC;IAClE,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAiD;gBAErD,MAAM,EAAE,YAAY;YAoBlB,iBAAiB;YA6CjB,YAAY;YA2BZ,sBAAsB;YAuBtB,cAAc;IA4B5B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,2BAA2B;YAOrB,MAAM;YAoCN,gBAAgB;YA2BhB,WAAW;IAwEzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,4BAA4B;YA0BtB,0BAA0B;YAoB1B,kBAAkB;IAShC,OAAO,CAAC,sBAAsB;YA2BhB,iBAAiB;IAoB/B,wDAAwD;YAC1C,cAAc;YAqBd,uBAAuB;IAyOrC,OAAO,CAAC,oBAAoB;IA0iB5B,OAAO,CAAC,qBAAqB;IAYvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B7B"}
@@ -139,6 +139,10 @@ export class ScrcpyServer {
139
139
  currentDeviceId = null;
140
140
  devicePollInterval = null;
141
141
  lastDeviceListJson = '';
142
+ lastDeviceList = [];
143
+ lastDeviceListAt = 0;
144
+ deviceListInFlight = null;
145
+ deviceConnectLocks = new Map();
142
146
  serverBinPath;
143
147
  started = false;
144
148
  projectionBlockedDevices = new Map();
@@ -210,7 +214,7 @@ export class ScrcpyServer {
210
214
  this.adbClient = new AdbServerClient(new AdbServerNodeTcpConnector({ host: '127.0.0.1', port: 5037 }));
211
215
  return this.adbClient;
212
216
  }
213
- async getDevicesList() {
217
+ async loadDevicesListFromAdb() {
214
218
  try {
215
219
  const client = await this.getAdbClient();
216
220
  const devices = (await withTimeout(client.getDevices(), this.config.adbConnectTimeoutMs, `Timed out listing devices after ${Math.round(this.config.adbConnectTimeoutMs / 1000)}s`));
@@ -227,6 +231,38 @@ export class ScrcpyServer {
227
231
  return [];
228
232
  }
229
233
  }
234
+ async getDevicesList(forceRefresh = false) {
235
+ const now = Date.now();
236
+ const cacheTtlMs = 2000;
237
+ if (!forceRefresh &&
238
+ this.lastDeviceListAt > 0 &&
239
+ now - this.lastDeviceListAt < cacheTtlMs) {
240
+ return this.lastDeviceList;
241
+ }
242
+ if (this.deviceListInFlight) {
243
+ return this.deviceListInFlight;
244
+ }
245
+ this.deviceListInFlight = this.loadDevicesListFromAdb()
246
+ .then((devices) => {
247
+ this.lastDeviceList = devices;
248
+ this.lastDeviceListAt = Date.now();
249
+ return devices;
250
+ })
251
+ .finally(() => {
252
+ this.deviceListInFlight = null;
253
+ });
254
+ return this.deviceListInFlight;
255
+ }
256
+ selectAvailableDeviceId(devices) {
257
+ const online = devices.find((device) => device.status.toLowerCase() === 'device' &&
258
+ !this.isProjectionBlocked(device.id));
259
+ return online?.id || null;
260
+ }
261
+ isSessionOpen(state) {
262
+ return (!state.closed &&
263
+ state.ws.readyState === WebSocket.OPEN &&
264
+ this.sessions.get(state.ws) === state);
265
+ }
230
266
  isProjectionBlocked(deviceId) {
231
267
  if (!deviceId)
232
268
  return false;
@@ -250,14 +286,12 @@ export class ScrcpyServer {
250
286
  this.currentDeviceId = targetDeviceId;
251
287
  return new Adb(await withTimeout(client.createTransport({ serial: targetDeviceId }), this.config.adbConnectTimeoutMs, `Timed out connecting to Android device ${targetDeviceId} via ADB after ${Math.round(this.config.adbConnectTimeoutMs / 1000)}s`));
252
288
  }
253
- const devices = (await withTimeout(client.getDevices(), this.config.adbConnectTimeoutMs, `Timed out listing Android devices via ADB after ${Math.round(this.config.adbConnectTimeoutMs / 1000)}s`));
254
- if (!devices || devices.length === 0)
255
- return null;
256
- const availableDevice = devices.find((device) => !this.isProjectionBlocked(device.serial));
257
- if (!availableDevice)
289
+ const devices = await this.getDevicesList();
290
+ const availableDeviceId = this.selectAvailableDeviceId(devices);
291
+ if (!availableDeviceId)
258
292
  return null;
259
- this.currentDeviceId = availableDevice.serial;
260
- return new Adb(await withTimeout(client.createTransport(availableDevice), this.config.adbConnectTimeoutMs, `Timed out connecting to ${availableDevice.serial} via ADB`));
293
+ this.currentDeviceId = availableDeviceId;
294
+ return new Adb(await withTimeout(client.createTransport({ serial: availableDeviceId }), this.config.adbConnectTimeoutMs, `Timed out connecting to ${availableDeviceId} via ADB`));
261
295
  }
262
296
  async wakeDeviceScreen(deviceId) {
263
297
  const targetDeviceId = deviceId || this.currentDeviceId;
@@ -386,7 +420,7 @@ export class ScrcpyServer {
386
420
  await Promise.allSettled(releases);
387
421
  }
388
422
  async refreshDevicesList() {
389
- const devices = await this.getDevicesList();
423
+ const devices = await this.getDevicesList(true);
390
424
  this.lastDeviceListJson = '';
391
425
  this.broadcastDevicesList(devices);
392
426
  }
@@ -403,6 +437,8 @@ export class ScrcpyServer {
403
437
  scrcpyClient: null,
404
438
  adb: null,
405
439
  deviceId: null,
440
+ connectPromise: null,
441
+ closed: false,
406
442
  videoWidth: 0,
407
443
  videoHeight: 0,
408
444
  streamReader: null,
@@ -415,9 +451,14 @@ export class ScrcpyServer {
415
451
  async sendDevicesListTo(state) {
416
452
  try {
417
453
  const devices = await this.getDevicesList();
454
+ if (!this.isSessionOpen(state))
455
+ return;
418
456
  if (this.currentDeviceId && this.isProjectionBlocked(this.currentDeviceId)) {
419
457
  this.currentDeviceId = null;
420
458
  }
459
+ if (!this.currentDeviceId) {
460
+ this.currentDeviceId = this.selectAvailableDeviceId(devices);
461
+ }
421
462
  wsSend(state.ws, 'devices-list', {
422
463
  devices,
423
464
  currentDeviceId: this.currentDeviceId,
@@ -451,6 +492,185 @@ export class ScrcpyServer {
451
492
  state.videoWidth = 0;
452
493
  state.videoHeight = 0;
453
494
  }
495
+ async connectDeviceForSession(state, options = {}, emitStatus) {
496
+ const { ws } = state;
497
+ const safeOptions = options || {};
498
+ let connectLockKey = null;
499
+ try {
500
+ emitStatus('connecting-device');
501
+ // 重复 connect-device 时,先释放旧资源避免 scrcpy 进程残留。
502
+ if (state.scrcpyClient) {
503
+ await this.releaseSession(state);
504
+ }
505
+ if (!this.isSessionOpen(state))
506
+ return;
507
+ let targetDeviceId = resolveRequestedDeviceId(safeOptions, this.currentDeviceId);
508
+ if (!targetDeviceId) {
509
+ const devices = await this.getDevicesList();
510
+ if (!this.isSessionOpen(state))
511
+ return;
512
+ targetDeviceId = this.selectAvailableDeviceId(devices) || undefined;
513
+ }
514
+ if (!targetDeviceId) {
515
+ wsSend(ws, 'error', { message: 'No device found' });
516
+ return;
517
+ }
518
+ if (this.isProjectionBlocked(targetDeviceId)) {
519
+ logger.info(`Skip scrcpy connect for scheduled task device: deviceId=${targetDeviceId}`);
520
+ wsSend(ws, 'error', { message: this.getProjectionBlockedMessage(targetDeviceId) });
521
+ return;
522
+ }
523
+ const lockedBy = this.deviceConnectLocks.get(targetDeviceId);
524
+ if (lockedBy && lockedBy !== state.id) {
525
+ logger.info(`Skip duplicate scrcpy connect: deviceId=${targetDeviceId},owner=${lockedBy},client=${state.id}`);
526
+ wsSend(ws, 'error', {
527
+ message: `设备 ${targetDeviceId} 正在建立投屏连接,请稍后重试`,
528
+ });
529
+ return;
530
+ }
531
+ connectLockKey = targetDeviceId;
532
+ this.deviceConnectLocks.set(connectLockKey, state.id);
533
+ this.currentDeviceId = targetDeviceId;
534
+ state.deviceId = targetDeviceId;
535
+ state.adb = await this.getAdb(targetDeviceId);
536
+ if (!this.isSessionOpen(state)) {
537
+ await this.releaseSession(state);
538
+ return;
539
+ }
540
+ if (!state.adb) {
541
+ wsSend(ws, 'error', { message: 'No device found' });
542
+ return;
543
+ }
544
+ await this.wakeDeviceScreen(targetDeviceId);
545
+ if (!this.isSessionOpen(state)) {
546
+ await this.releaseSession(state);
547
+ return;
548
+ }
549
+ state.scrcpyClient = await this.startScrcpy(state.adb, safeOptions, emitStatus);
550
+ if (!this.isSessionOpen(state)) {
551
+ await this.releaseSession(state);
552
+ return;
553
+ }
554
+ logger.info(`Scrcpy started for device=${targetDeviceId},client=${state.id}`);
555
+ const videoStreamRaw = state.scrcpyClient?.videoStream;
556
+ if (!videoStreamRaw) {
557
+ wsSend(ws, 'error', {
558
+ message: 'Video stream not available in scrcpy client',
559
+ });
560
+ await this.releaseSession(state);
561
+ return;
562
+ }
563
+ emitStatus('waiting-for-video');
564
+ const videoStream = typeof videoStreamRaw?.then === 'function'
565
+ ? await withTimeout(videoStreamRaw, this.config.videoStreamTimeoutMs, `Timed out waiting for scrcpy video stream metadata after ${Math.round(this.config.videoStreamTimeoutMs / 1000)}s`)
566
+ : videoStreamRaw;
567
+ if (!this.isSessionOpen(state)) {
568
+ await this.releaseSession(state);
569
+ return;
570
+ }
571
+ const metadata = videoStream.metadata;
572
+ // 严格校验:缺失元数据直接报错,避免兜底 H264/1080x1920 与真实流不匹配。
573
+ if (!metadata ||
574
+ !metadata.codec ||
575
+ !metadata.width ||
576
+ !metadata.height) {
577
+ const detail = JSON.stringify(metadata || {});
578
+ logger.error(`incomplete video metadata: ${detail}`);
579
+ wsSend(ws, 'error', {
580
+ message: `Incomplete video metadata from scrcpy: ${detail}`,
581
+ });
582
+ await this.releaseSession(state);
583
+ return;
584
+ }
585
+ // 唤醒屏幕,避免设备熄屏时 scrcpy 推黑画面。
586
+ const controller = state.scrcpyClient?.controller;
587
+ if (controller) {
588
+ try {
589
+ await controller.setScreenPowerMode?.(2);
590
+ }
591
+ catch (e) {
592
+ logger.warn(`setScreenPowerMode failed: ${e.message}`);
593
+ }
594
+ try {
595
+ await controller.backOrScreenOn?.(0);
596
+ }
597
+ catch (e) {
598
+ logger.warn(`backOrScreenOn failed: ${e.message}`);
599
+ }
600
+ }
601
+ if (!this.isSessionOpen(state)) {
602
+ await this.releaseSession(state);
603
+ return;
604
+ }
605
+ wsSend(ws, 'video-metadata', {
606
+ codec: metadata.codec,
607
+ width: metadata.width,
608
+ height: metadata.height,
609
+ });
610
+ state.videoWidth = metadata.width;
611
+ state.videoHeight = metadata.height;
612
+ const { stream } = videoStream;
613
+ const reader = stream.getReader();
614
+ state.streamReader = reader;
615
+ const processStream = async () => {
616
+ try {
617
+ while (true) {
618
+ const { done, value } = await reader.read();
619
+ if (done)
620
+ break;
621
+ const data = value.data;
622
+ const frameType = value.type || 'data';
623
+ const isKey = !!(value.keyframe ?? value.keyFrame) || isH264IdrFrame(data);
624
+ const isConfig = frameType === 'configuration';
625
+ if (!this.isSessionOpen(state))
626
+ break;
627
+ ws.send(buildVideoFrameBuffer(data, isKey, isConfig, Date.now()), { binary: true });
628
+ }
629
+ }
630
+ catch (error) {
631
+ const msg = error.message || '';
632
+ if (!/cancel|abort/i.test(msg)) {
633
+ logger.error(`Video stream error: ${msg}`);
634
+ if (this.isSessionOpen(state)) {
635
+ wsSend(ws, 'error', {
636
+ message: 'video stream processing error',
637
+ });
638
+ }
639
+ }
640
+ return;
641
+ }
642
+ finally {
643
+ if (state.streamReader === reader) {
644
+ state.streamReader = null;
645
+ }
646
+ }
647
+ if (this.isSessionOpen(state)) {
648
+ wsSend(ws, 'error', { message: 'video stream ended' });
649
+ }
650
+ await this.releaseSession(state);
651
+ };
652
+ void processStream();
653
+ if (state.scrcpyClient?.controller && this.isSessionOpen(state)) {
654
+ wsSend(ws, 'control-ready');
655
+ }
656
+ }
657
+ catch (error) {
658
+ const message = error?.message || 'Unknown error';
659
+ logger.error(`connect-device failed: ${message}`);
660
+ await this.releaseSession(state);
661
+ if (this.isSessionOpen(state)) {
662
+ wsSend(ws, 'error', {
663
+ message: `Failed to connect device: ${message}`,
664
+ });
665
+ }
666
+ }
667
+ finally {
668
+ if (connectLockKey &&
669
+ this.deviceConnectLocks.get(connectLockKey) === state.id) {
670
+ this.deviceConnectLocks.delete(connectLockKey);
671
+ }
672
+ }
673
+ }
454
674
  attachSocketHandlers(state) {
455
675
  const { ws } = state;
456
676
  const emitStatus = (phase) => {
@@ -526,6 +746,12 @@ export class ScrcpyServer {
526
746
  'get-devices': () => this.sendDevicesListTo(state),
527
747
  'switch-device': async (deviceId) => {
528
748
  try {
749
+ if (state.connectPromise) {
750
+ wsSend(ws, 'error', {
751
+ message: 'Device connection is already in progress',
752
+ });
753
+ return;
754
+ }
529
755
  const id = typeof deviceId === 'string' ? deviceId : String(deviceId ?? '');
530
756
  if (this.isProjectionBlocked(id)) {
531
757
  wsSend(ws, 'error', { message: this.getProjectionBlockedMessage(id) });
@@ -547,134 +773,25 @@ export class ScrcpyServer {
547
773
  });
548
774
  }
549
775
  },
550
- 'connect-device': async (options = {}) => {
551
- try {
776
+ 'connect-device': (options = {}) => {
777
+ if (state.connectPromise) {
552
778
  emitStatus('connecting-device');
553
- // 重复 connect-device 时,先释放旧资源避免 scrcpy 残留
554
- if (state.scrcpyClient) {
555
- await this.releaseSession(state);
556
- }
557
- const requestedDeviceId = resolveRequestedDeviceId(options || {}, this.currentDeviceId);
558
- if (this.isProjectionBlocked(requestedDeviceId)) {
559
- const blockedDeviceId = requestedDeviceId || '';
560
- logger.info(`Skip scrcpy connect for scheduled task device: deviceId=${blockedDeviceId}`);
561
- wsSend(ws, 'error', { message: this.getProjectionBlockedMessage(blockedDeviceId) });
562
- return;
563
- }
564
- if (requestedDeviceId) {
565
- this.currentDeviceId = requestedDeviceId;
566
- state.deviceId = requestedDeviceId;
567
- }
568
- state.adb = await this.getAdb(requestedDeviceId);
569
- if (!state.adb) {
570
- wsSend(ws, 'error', { message: 'No device found' });
571
- return;
572
- }
573
- await this.wakeDeviceScreen(this.currentDeviceId || requestedDeviceId);
574
- state.scrcpyClient = await this.startScrcpy(state.adb, options || {}, emitStatus);
575
- logger.info(`Scrcpy started for device=${this.currentDeviceId},client=${state.id}`);
576
- const videoStreamRaw = state.scrcpyClient?.videoStream;
577
- if (!videoStreamRaw) {
578
- wsSend(ws, 'error', {
579
- message: 'Video stream not available in scrcpy client',
580
- });
581
- await this.releaseSession(state);
582
- return;
583
- }
584
- emitStatus('waiting-for-video');
585
- const videoStream = typeof videoStreamRaw?.then === 'function'
586
- ? await withTimeout(videoStreamRaw, this.config.videoStreamTimeoutMs, `Timed out waiting for scrcpy video stream metadata after ${Math.round(this.config.videoStreamTimeoutMs / 1000)}s`)
587
- : videoStreamRaw;
588
- const metadata = videoStream.metadata;
589
- // 严格校验:缺失元数据直接报错,避免兜底 H264/1080x1920 与真实流不匹配
590
- if (!metadata ||
591
- !metadata.codec ||
592
- !metadata.width ||
593
- !metadata.height) {
594
- const detail = JSON.stringify(metadata || {});
595
- logger.error(`incomplete video metadata: ${detail}`);
596
- wsSend(ws, 'error', {
597
- message: `Incomplete video metadata from scrcpy: ${detail}`,
598
- });
599
- await this.releaseSession(state);
600
- return;
601
- }
602
- // 唤醒屏幕,避免设备熄屏时 scrcpy 推黑画面
603
- const controller = state.scrcpyClient?.controller;
604
- if (controller) {
605
- try {
606
- await controller.setScreenPowerMode?.(2);
607
- }
608
- catch (e) {
609
- logger.warn(`setScreenPowerMode failed: ${e.message}`);
610
- }
611
- try {
612
- await controller.backOrScreenOn?.(0);
613
- }
614
- catch (e) {
615
- logger.warn(`backOrScreenOn failed: ${e.message}`);
616
- }
617
- }
618
- wsSend(ws, 'video-metadata', {
619
- codec: metadata.codec,
620
- width: metadata.width,
621
- height: metadata.height,
622
- });
623
- state.videoWidth = metadata.width;
624
- state.videoHeight = metadata.height;
625
- const { stream } = videoStream;
626
- const reader = stream.getReader();
627
- state.streamReader = reader;
628
- const processStream = async () => {
629
- try {
630
- while (true) {
631
- const { done, value } = await reader.read();
632
- if (done)
633
- break;
634
- const data = value.data;
635
- const frameType = value.type || 'data';
636
- const isKey = !!(value.keyframe ?? value.keyFrame) || isH264IdrFrame(data);
637
- const isConfig = frameType === 'configuration';
638
- if (ws.readyState !== WebSocket.OPEN)
639
- break;
640
- ws.send(buildVideoFrameBuffer(data, isKey, isConfig, Date.now()), { binary: true });
641
- }
642
- }
643
- catch (error) {
644
- const msg = error.message || '';
645
- if (!/cancel|abort/i.test(msg)) {
646
- logger.error(`Video stream error: ${msg}`);
647
- if (ws.readyState === WebSocket.OPEN) {
648
- wsSend(ws, 'error', {
649
- message: 'video stream processing error',
650
- });
651
- }
652
- }
653
- return;
654
- }
655
- finally {
656
- if (state.streamReader === reader) {
657
- state.streamReader = null;
658
- }
659
- }
660
- if (ws.readyState === WebSocket.OPEN) {
661
- wsSend(ws, 'error', { message: 'video stream ended' });
662
- }
663
- await this.releaseSession(state);
664
- };
665
- void processStream();
666
- if (state.scrcpyClient?.controller) {
667
- wsSend(ws, 'control-ready');
668
- }
669
- }
670
- catch (error) {
671
- const message = error?.message || 'Unknown error';
672
- logger.error(`connect-device failed: ${message}`);
673
- await this.releaseSession(state);
674
779
  wsSend(ws, 'error', {
675
- message: `Failed to connect device: ${message}`,
780
+ message: 'Device connection is already in progress',
676
781
  });
782
+ return;
677
783
  }
784
+ const promise = this.connectDeviceForSession(state, options || {}, emitStatus);
785
+ state.connectPromise = promise;
786
+ void promise
787
+ .catch((error) => {
788
+ logger.error(`connect-device promise failed: ${error.message}`);
789
+ })
790
+ .finally(() => {
791
+ if (state.connectPromise === promise) {
792
+ state.connectPromise = null;
793
+ }
794
+ });
678
795
  },
679
796
  'control-touch': async (raw = {}) => {
680
797
  try {
@@ -1076,6 +1193,7 @@ export class ScrcpyServer {
1076
1193
  });
1077
1194
  ws.on('close', async (code, reason) => {
1078
1195
  logger.info(`Client disconnected: id=${state.id}, code=${code}, reason=${reason?.toString() || ''}`);
1196
+ state.closed = true;
1079
1197
  this.sessions.delete(ws);
1080
1198
  androidRecordingManager.cancel(state.id);
1081
1199
  await this.releaseSession(state);
@@ -1092,7 +1210,7 @@ export class ScrcpyServer {
1092
1210
  return;
1093
1211
  this.devicePollInterval = setInterval(async () => {
1094
1212
  try {
1095
- const devices = await this.getDevicesList();
1213
+ const devices = await this.getDevicesList(true);
1096
1214
  this.broadcastDevicesList(devices);
1097
1215
  }
1098
1216
  catch (error) {
@@ -1125,6 +1243,7 @@ export class ScrcpyServer {
1125
1243
  this.devicePollInterval = null;
1126
1244
  }
1127
1245
  for (const sess of this.sessions.values()) {
1246
+ sess.closed = true;
1128
1247
  await this.releaseSession(sess);
1129
1248
  try {
1130
1249
  sess.ws.close(1001, 'server shutting down');