"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _adbDevicesEmitter=_interopRequireDefault(require("adb-devices-emitter")),_adbCommander=_interopRequireDefault(require("adb-commander")),_sharedUtils=require("@hap-toolkit/shared-utils"),_recordClient=require("@hap-toolkit/shared-utils/lib/record-client"),_config=_interopRequireDefault(require("@hap-toolkit/shared-utils/config")),_debuglog=_interopRequireDefault(require("./debuglog"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const REMOTE_REVERSE_PORT=12306,REMOTE_UP_FORWARD_PORT=39517;class ADBModule{constructor(e){this.option=e,this.currentDeviceMap=new Map,this.cachedDeviceMap=new Map,this.DEBUG=(process.env.NODE_DEBUG||"").split(",").includes("adb"),this._localUpForwardPort=REMOTE_UP_FORWARD_PORT,this.commander=_adbCommander.default,this.devicesEmitter=_adbDevicesEmitter.default,this._lastPromise=null,this.init()}init(){(0,_debuglog.default)("init(): start"),this.devicesEmitter.addEventListener("deviceAdded",e=>{this._listen(e,this.onDeviceAdded.bind(this))}),this.devicesEmitter.addEventListener("deviceRemoved",e=>{this._listen(e,this.onDeviceRemoved.bind(this))}),this.devicesEmitter.start()}_listen(e,r){this._lastPromise?this._lastPromise=this._lastPromise.then(()=>r(e),()=>r(e)):this._lastPromise=r(e)}_getNextLocalForwardPort(){return this._localUpForwardPort++}async onDeviceAdded(e){const{sn:r}=e;_sharedUtils.colorconsole.info(`### App Server ### 手机设备(${r})被连入`);const t=this.option.localReversePort;if((await this.establishADBProxyLink("reverse",[r,t,REMOTE_REVERSE_PORT])).err)return void _sharedUtils.colorconsole.error(`### App Server ### onDeviceAdded(): (${r})建立adb reverse失败(local port: ${t}, remote port: ${REMOTE_REVERSE_PORT})`);let i=this.cachedDeviceMap.get(r);if((0,_debuglog.default)(`onDeviceAdded():(${r})\ncachedDevice:\t${JSON.stringify(i)}\ncachedDeviceList:\t${JSON.stringify(Array.from(this.cachedDeviceMap.entries()))}`),i&&i.upForwardPortPair||(i={upForwardPortPair:[this._getNextLocalForwardPort(),REMOTE_UP_FORWARD_PORT]}),(await this.establishADBProxyLink("forward",[r].concat(i.upForwardPortPair))).err)_sharedUtils.colorconsole.error(`### App Server ### onDeviceAdded(): (${r})建立adb forward失败(local port: ${i.upForwardPortPair[0]}, remote port: ${i.upForwardPortPair[1]}) `);else{if(i.wsPortPair){(await this.establishADBProxyLink("forward",[r,i.wsPortPair[0],i.wsPortPair[1]])).err&&(_sharedUtils.colorconsole.warn(`### App Server ### onDeviceAdded():(${r}) 建立adb forward失败(local port: ${i.wsPortPair[0]}, remote port: ${i.wsPortPair[1]})`),i.wsPortPair=void 0)}this.currentDeviceMap.set(r,i),this.cachedDeviceMap.set(r,i),await this._writeClientLogFile({sn:r,ip:"127.0.0.1",port:i.upForwardPortPair[0]}),(0,_debuglog.default)(`onDeviceAdded():(${r}) end`)}}async onDeviceRemoved(e){const{sn:r}=e;_sharedUtils.colorconsole.info(`### App Server ### 手机设备(${r})被拔出`),this.currentDeviceMap.delete(r),this.DEBUG&&((0,_debuglog.default)(`deviceRemoved():(${r}) cachedDeviceList: ${JSON.stringify(Array.from(this.cachedDeviceMap.entries()))}`),await this.commander.print(`adb -s ${r} reverse --list`),await this.commander.print(`adb -s ${r} forward --list`)),await this._removeItemFromClientLogFile(r),(0,_debuglog.default)(`deviceRemoved():(${r}) end`)}async _writeClientLogFile(e){try{const{clientRecordPath:r}=_config.default;(0,_recordClient.recordClient)(r,e,e=>{(0,_debuglog.default)(e)})}catch(e){_sharedUtils.colorconsole.error(`### App Server ### writeClientLogFile(): 写入hap-toolkit-client-records.json文件出错: ${e.message}`)}}async _removeItemFromClientLogFile(e){try{const{clientRecordPath:r}=_config.default;(0,_recordClient.removeClientBySn)(r,e,e=>{(0,_debuglog.default)(e)})}catch(e){_sharedUtils.colorconsole.error(`### App Server ### _removeItemFromClientLogFile(): 移除hap-toolkit-client-records.json设备信息出错: ${e.message}`)}}async forwardForWsChannel(e,r){const t=this.currentDeviceMap.get(e),i=r;if(!t)return _sharedUtils.colorconsole.error(`### AppApp Server ### 获取(${e})设备信息失败`),{localWsPort:i};const o=t.wsPortPair;if(o&&o[0]===i&&o[1]===r)return{localWsPort:i};const{err:s}=await this.establishADBProxyLink("forward",[e,i,r]);return s?(_sharedUtils.colorconsole.error("### AppApp Server ### forwardForWsChannel(): 创建WebSocket端口映射失败"),t.wsPortPair=void 0,{err:s}):(t.wsPortPair=[i,r],{localWsPort:i})}async establishADBProxyLink(e,r){const t=await this.commander[e](...r);return this.DEBUG&&((0,_debuglog.default)(`establishADBReverseLink(): (${r[0]}) adb ${e} setup result: ${JSON.stringify(t)}`),await this.commander.print(`adb -s ${r[0]} ${e} --list`)),t}}var _default=ADBModule;exports.default=_default; //# sourceMappingURL=module.js.map