mirror of
https://github.com/nuintun/command-manager.git
synced 2025-06-08 04:04:04 +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 path = require('path');
|
||||||
var util = require('../../util');
|
var util = require('../../util');
|
||||||
var Vue = require('../../vue/vue');
|
var Vue = require('../../vue/vue');
|
||||||
var Terminal = require('../../terminal');
|
|
||||||
|
|
||||||
const EMPTYPROJECT = {
|
const EMPTYPROJECT = {
|
||||||
name: '',
|
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
|
* 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
|
* @param name
|
||||||
*/
|
*/
|
||||||
function closeXTerm(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', {
|
module.exports = Vue.component('app-main', {
|
||||||
@ -105,7 +131,7 @@ module.exports = Vue.component('app-main', {
|
|||||||
this.command = project.command.slice(0, 3);
|
this.command = project.command.slice(0, 3);
|
||||||
this.moreCommand = project.command.slice(3);
|
this.moreCommand = project.command.slice(3);
|
||||||
|
|
||||||
openXTerm(project.name);
|
openXTerm(this);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -162,6 +188,8 @@ module.exports = Vue.component('app-main', {
|
|||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
ipc.on('emulator', function (event, type, project, data){
|
ipc.on('emulator', function (event, type, project, data){
|
||||||
|
var runtime = AppRuntime[project.name];
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'data':
|
case 'data':
|
||||||
data = data.toString();
|
data = data.toString();
|
||||||
@ -173,19 +201,12 @@ module.exports = Vue.component('app-main', {
|
|||||||
data = '\u001b[32m命令执行完成\u001b[0m';
|
data = '\u001b[32m命令执行完成\u001b[0m';
|
||||||
break;
|
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');
|
// event.sender.send('emulator', project, 'stop');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
ready: function (){
|
ready: function (){
|
||||||
var context = this;
|
openXTerm(this);
|
||||||
|
|
||||||
worker.onmessage = function (event){
|
|
||||||
if (event.data.name === context.project.name) {
|
|
||||||
context.$els.terminal.innerHTML = event.data.screen;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
openXTerm(this.project.name);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -6,48 +6,81 @@
|
|||||||
|
|
||||||
importScripts('../../terminal/index.js');
|
importScripts('../../terminal/index.js');
|
||||||
|
|
||||||
var ACTIVE;
|
var xterm;
|
||||||
var RUNTIMECACHE = {};
|
|
||||||
|
|
||||||
function send(name, xterm){
|
onconnect = function (event){
|
||||||
postMessage({
|
var port = event.ports[0];
|
||||||
name: name,
|
|
||||||
screen: xterm.toString('html')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
onmessage = function (event){
|
port.onmessage = function (event){
|
||||||
var xterm;
|
var message = event.data;
|
||||||
var message = event.data;
|
|
||||||
|
|
||||||
switch (message.action) {
|
function send(name, xterm){
|
||||||
case 'open':
|
var data = {
|
||||||
xterm = RUNTIMECACHE[message.name];
|
name: name,
|
||||||
|
screen: xterm.toString('html')
|
||||||
|
};
|
||||||
|
|
||||||
if (!xterm) {
|
port.postMessage(data);
|
||||||
xterm = new AnsiTerminal(120, 60, 0);
|
}
|
||||||
xterm.newline_mode = true;
|
|
||||||
RUNTIMECACHE[message.name] = xterm;
|
|
||||||
}
|
|
||||||
|
|
||||||
ACTIVE = message.name;
|
switch (message.action) {
|
||||||
|
case 'open':
|
||||||
|
if (!xterm) {
|
||||||
|
xterm = new AnsiTerminal(120, 60, 0);
|
||||||
|
xterm.newline_mode = true;
|
||||||
|
}
|
||||||
|
|
||||||
send(message.name, xterm);
|
send(message.name, xterm);
|
||||||
break;
|
break;
|
||||||
case 'close':
|
case 'close':
|
||||||
delete RUNTIMECACHE[message.name];
|
delete xterm.reset();
|
||||||
break;
|
break;
|
||||||
case 'write':
|
case 'write':
|
||||||
xterm = RUNTIMECACHE[message.name];
|
|
||||||
|
|
||||||
if (ACTIVE === message.name) {
|
|
||||||
xterm.write(message.data);
|
xterm.write(message.data);
|
||||||
send(message.name, xterm);
|
send(message.name, xterm);
|
||||||
} else {
|
break;
|
||||||
setTimeout(function (){
|
}
|
||||||
xterm.write(message.data);
|
};
|
||||||
}, 16);
|
|
||||||
}
|
//function send(name, xterm){
|
||||||
break;
|
// 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