vscode-minxing-extension
Version:
适用于敏行移动平台的开发工具,包含创建应用模板,WiFi真机同步,日志输出等功能
61 lines (60 loc) • 2.45 kB
text/typescript
import * as MXAPI from 'minxing-devtools-core';
import * as vscode from 'vscode';
import * as _ from 'underscore';
import co from 'co';
import * as Utils from '../utils';
import {WifiInfo} from '../domain';
class StatusBarItem{
static _instance: StatusBarItem;
static get instance(){
if (StatusBarItem._instance == null) {
StatusBarItem._instance = new StatusBarItem();
}
return StatusBarItem._instance;
}
ctrl: vscode.StatusBarItem;
constructor(){
this.ctrl = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 2);
_.extendOwn(this.ctrl, {
tooltip: '客户端连接状态',
command: 'Minxing.getWifiInfo'
});
this.update();
this.ctrl.show();
}
update(){
const {port, ip, connectionCount, remoteIps} : WifiInfo = MXAPI.Wifi.info() as WifiInfo;
const icon = connectionCount > 0 ? 'pulse' : 'radio-tower';
const ips = remoteIps.map(ip => ip.replace(/^::ffff:/i, ''));
const portStr = port == null ? '' : `, 端口:${port}`;
const ipStr = _.isEmpty(ips) ? '' : `, 客户端:${ips.join(', ')}`;
const status = `$(${icon}) IP:${ip.join(' | ')}${portStr},连接数:${connectionCount}${ipStr}`;
this.ctrl.text = status;
}
dispose(){
this.ctrl.dispose();
}
}
export const statusBarItem = StatusBarItem.instance;
export default {
start: co.wrap(function *(context){
const tempPath: string = Utils.getTempPath();
const port: number = yield MXAPI.Utils.getServerPort(1001, 9999);
MXAPI.Wifi.start({
tempPath, port,
onConnection: co.wrap(function*(clientIp:string){
StatusBarItem.instance.update();
yield vscode.window.showInformationMessage(`调试终端 [${clientIp.replace(/^::ffff:/i, '')}] 已连接到 VSCode。可以开始调试了...`);
}),
onClose: co.wrap(function*(clientIp:string){
StatusBarItem.instance.update();
yield vscode.window.showInformationMessage(`调试终端 [${clientIp.replace(/^::ffff:/i, '')}] 已断离 VSCode`);
})
});
StatusBarItem.instance.update();
context.subscriptions.push(StatusBarItem.instance.ctrl);
}),
stop(){
StatusBarItem.instance.dispose();
}
};