rubick
Version:
tools for mtc
81 lines (72 loc) • 2.31 kB
JavaScript
/**
* Created by hongzhiyuan on 2017/4/14.
*/
let co = require('co');
let fs = require('fs');
let adb = require('../../utils/adb');
let sleep = require('co-sleep');
let os = require('os');
let platform = os.platform();
let logger = require('../../log').init('rubick');
let Device = require('./base');
let _instance = null;
class DeviceManager {
constructor() {
if (!_instance) {
_instance = this;
}
this.devices = {};
this.logs = [];
return _instance;
}
init() {
logger.info('DeviceManager Start');
co(function* (self) {
yield self.getDevices();
}(this));
}
getDevices() {
logger.info('get devices');
return co(function* (self) {
let devices = yield adb.listDevices();
let devicesOn = {};
for (let device of devices) {
logger.info(device);
let deviceId = device.id;
if (deviceId in self.devices) {
self.devices[deviceId].adbStatus = device.type;
} else {
let deviceInstance = Device.getInstance('android', device.id, device.type);
self.devices[deviceId] = deviceInstance;
}
devicesOn[deviceId] = true;
}
logger.info(self.devices);
for (let deviceId of Object.keys(self.devices)) {
if (!(deviceId in devicesOn) && (self.devices[deviceId].adbStatus !== 'unexists')) {
self.devices[deviceId].adbStatus = 'unexists';
}
}
}(this));
}
getDevice(serial) {
if (this.devices.has(serial) && this.devices[serial].adbStatus === 'device') {
return this.devices[serial];
} else {
return null;
}
}
addDevice(device) {
this.devices[device.serial] = device;
}
all() {
let result = [];
logger.info(this.devices);
for (let deviceId of Object.keys(this.devices)) {
result.push(this.devices[deviceId].toJSON());
}
return result;
}
}
module.exports = DeviceManager;