mirror of
https://github.com/nuintun/command-manager.git
synced 2025-06-07 03:14:07 +08:00
update files
This commit is contained in:
parent
3671a3c456
commit
ad789f61f5
@ -10,7 +10,6 @@ var fs = require('fs');
|
||||
var path = require('path');
|
||||
var util = require('../../util');
|
||||
var Vue = require('../../vue/vue');
|
||||
var Terminal = require('../../terminal');
|
||||
|
||||
const EMPTYPROJECT = {
|
||||
name: '',
|
||||
@ -47,14 +46,34 @@ function scroll(xterm, parent){
|
||||
}
|
||||
}
|
||||
|
||||
var worker = new Worker('static/js/components/app-main/terminal-worker.js');
|
||||
// uuid
|
||||
var uuid = 0;
|
||||
|
||||
/**
|
||||
* openXTerm
|
||||
* @param name
|
||||
* @param vm
|
||||
*/
|
||||
function openXTerm(name){
|
||||
worker.postMessage({ action: 'open', name: name });
|
||||
|
||||
function openXTerm(vm){
|
||||
var project = vm.project;
|
||||
var runtime = AppRuntime[project.name];
|
||||
|
||||
if (!runtime) {
|
||||
var worker = new SharedWorker('static/js/components/app-main/terminal-worker.js', 'SharedWorker-' + (uuid++));
|
||||
|
||||
worker.port.addEventListener('message', function (event){
|
||||
if (vm.project.name === event.data.name) {
|
||||
vm.$els.terminal.innerHTML = event.data.screen;
|
||||
}
|
||||
});
|
||||
|
||||
worker.port.start();
|
||||
worker.port.postMessage({ action: 'open', name: project.name });
|
||||
|
||||
AppRuntime[project.name] = { worker: worker };
|
||||
} else {
|
||||
runtime.worker.port.postMessage({ action: 'open', name: project.name });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,7 +81,14 @@ function openXTerm(name){
|
||||
* @param name
|
||||
*/
|
||||
function closeXTerm(name){
|
||||
worker.postMessage({ action: 'close', name: name });
|
||||
var runtime = AppRuntime[name];
|
||||
|
||||
if (runtime) {
|
||||
runtime.worker.port.postMessage({ action: 'close', name: name });
|
||||
runtime.worker.terminate();
|
||||
|
||||
delete AppRuntime[name];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Vue.component('app-main', {
|
||||
@ -105,7 +131,7 @@ module.exports = Vue.component('app-main', {
|
||||
this.command = project.command.slice(0, 3);
|
||||
this.moreCommand = project.command.slice(3);
|
||||
|
||||
openXTerm(project.name);
|
||||
openXTerm(this);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@ -162,6 +188,8 @@ module.exports = Vue.component('app-main', {
|
||||
}, false);
|
||||
|
||||
ipc.on('emulator', function (event, type, project, data){
|
||||
var runtime = AppRuntime[project.name];
|
||||
|
||||
switch (type) {
|
||||
case 'data':
|
||||
data = data.toString();
|
||||
@ -173,19 +201,12 @@ module.exports = Vue.component('app-main', {
|
||||
data = '\u001b[32m命令执行完成\u001b[0m';
|
||||
break;
|
||||
}
|
||||
worker.postMessage({ action: 'write', name: project.name, data: data.toString() });
|
||||
|
||||
runtime.worker.port.postMessage({ action: 'write', name: project.name, data: data.toString() });
|
||||
// event.sender.send('emulator', project, 'stop');
|
||||
});
|
||||
},
|
||||
ready: function (){
|
||||
var context = this;
|
||||
|
||||
worker.onmessage = function (event){
|
||||
if (event.data.name === context.project.name) {
|
||||
context.$els.terminal.innerHTML = event.data.screen;
|
||||
}
|
||||
};
|
||||
|
||||
openXTerm(this.project.name);
|
||||
openXTerm(this);
|
||||
}
|
||||
});
|
@ -6,48 +6,81 @@
|
||||
|
||||
importScripts('../../terminal/index.js');
|
||||
|
||||
var ACTIVE;
|
||||
var RUNTIMECACHE = {};
|
||||
var xterm;
|
||||
|
||||
function send(name, xterm){
|
||||
postMessage({
|
||||
name: name,
|
||||
screen: xterm.toString('html')
|
||||
});
|
||||
}
|
||||
onconnect = function (event){
|
||||
var port = event.ports[0];
|
||||
|
||||
onmessage = function (event){
|
||||
var xterm;
|
||||
var message = event.data;
|
||||
port.onmessage = function (event){
|
||||
var message = event.data;
|
||||
|
||||
switch (message.action) {
|
||||
case 'open':
|
||||
xterm = RUNTIMECACHE[message.name];
|
||||
function send(name, xterm){
|
||||
var data = {
|
||||
name: name,
|
||||
screen: xterm.toString('html')
|
||||
};
|
||||
|
||||
if (!xterm) {
|
||||
xterm = new AnsiTerminal(120, 60, 0);
|
||||
xterm.newline_mode = true;
|
||||
RUNTIMECACHE[message.name] = xterm;
|
||||
}
|
||||
port.postMessage(data);
|
||||
}
|
||||
|
||||
ACTIVE = message.name;
|
||||
switch (message.action) {
|
||||
case 'open':
|
||||
if (!xterm) {
|
||||
xterm = new AnsiTerminal(120, 60, 0);
|
||||
xterm.newline_mode = true;
|
||||
}
|
||||
|
||||
send(message.name, xterm);
|
||||
break;
|
||||
case 'close':
|
||||
delete RUNTIMECACHE[message.name];
|
||||
break;
|
||||
case 'write':
|
||||
xterm = RUNTIMECACHE[message.name];
|
||||
|
||||
if (ACTIVE === message.name) {
|
||||
send(message.name, xterm);
|
||||
break;
|
||||
case 'close':
|
||||
delete xterm.reset();
|
||||
break;
|
||||
case 'write':
|
||||
xterm.write(message.data);
|
||||
send(message.name, xterm);
|
||||
} else {
|
||||
setTimeout(function (){
|
||||
xterm.write(message.data);
|
||||
}, 16);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
//function send(name, xterm){
|
||||
// postMessage({
|
||||
// name: name,
|
||||
// screen: xterm.toString('html')
|
||||
// });
|
||||
//}
|
||||
//
|
||||
//switch (message.action) {
|
||||
// case 'open':
|
||||
// xterm = RUNTIMECACHE[message.name];
|
||||
//
|
||||
// if (!xterm) {
|
||||
// xterm = new AnsiTerminal(120, 60, 0);
|
||||
// xterm.newline_mode = true;
|
||||
// SCREENCACHE[message.name] = '';
|
||||
// RUNTIMECACHE[message.name] = xterm;
|
||||
// }
|
||||
//
|
||||
// ACTIVE = message.name;
|
||||
//
|
||||
// if (SCREENCACHE[message.name]) {
|
||||
// xterm.write(SCREENCACHE[message.name]);
|
||||
// SCREENCACHE[message.name] = '';
|
||||
// }
|
||||
//
|
||||
// send(message.name, xterm);
|
||||
// break;
|
||||
// case 'close':
|
||||
// delete RUNTIMECACHE[message.name];
|
||||
// break;
|
||||
// case 'write':
|
||||
// xterm = RUNTIMECACHE[message.name];
|
||||
//
|
||||
// if (ACTIVE === message.name) {
|
||||
// xterm.write(message.data);
|
||||
// send(message.name, xterm);
|
||||
// } else {
|
||||
// SCREENCACHE[message.name] += message.data;
|
||||
// }
|
||||
// break;
|
||||
//}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user