| 7 | import { APP_ENV } from "../../config/config"; |
| 8 | |
| 9 | class 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 | } |
nothing calls this directly
no outgoing calls
no test coverage detected