MCPcopy Create free account
hub / github.com/AutoCodeStack/ios-device-farm / DeviceManager

Class DeviceManager

src/modules/device-management/device.manager.ts:9–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7import { APP_ENV } from "../../config/config";
8
9class DeviceManager {
10 private static instance: DeviceManager;
11 private devices: Map<string, Device> = new Map();
12 private mutex = new Mutex();
13 iosListenProcess = new SubProcess("ios", ["listen"]);
14
15 constructor() {
16 this.listenToDeviceEvents();
17 }
18
19 public static getInstance(): DeviceManager {
20 if (!DeviceManager.instance) {
21 DeviceManager.instance = new DeviceManager();
22 }
23 return DeviceManager.instance;
24 }
25
26 private async attachedEvent(deviceId: number, properties: any) {
27 const release = await this.mutex.acquire();
28 try {
29 const udid = properties.SerialNumber;
30 let device = this.devices.get(udid);
31 if (device) {
32 device.id = deviceId;
33 device.status = Status.AVAILABLE;
34 } else {
35 const deviceSize = getDeviceSize(properties.productType);
36 device = {
37 id: deviceId,
38 name: getDeviceName(properties.productType),
39 udid: udid,
40 version: properties.version,
41 status: Status.AVAILABLE,
42 dpr: deviceSize.dpr,
43 height: deviceSize.viewportHeight,
44 width: deviceSize.viewportWidth,
45 };
46 this.devices.set(udid, device);
47 }
48 logger.info(`Device (${device.udid}) is now available`);
49 } finally {
50 release();
51 }
52 }
53
54 private async datachedEvent(deviceId: number) {
55 const release = await this.mutex.acquire();
56 try {
57 let device = this.getDeviceById(deviceId);
58 if (device) {
59 device.status = Status.OFFLINE;
60 logger.info(`Device (${device?.udid}) is offline`);
61 } else {
62 logger.error(`Device (${deviceId}) was not found`);
63 }
64 } finally {
65 release();
66 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected