mirror of
https://github.com/nuintun/command-manager.git
synced 2025-06-06 10:54:07 +08:00
update files
This commit is contained in:
parent
700c728b28
commit
72590c62b6
@ -4,7 +4,9 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var util = require('util');
|
||||
var spawn = require('./spawn');
|
||||
var EventEmitter = require('events');
|
||||
var threadKill = require('./thread-kill');
|
||||
|
||||
/**
|
||||
@ -16,10 +18,13 @@ function Emulator(task){
|
||||
this.task = task;
|
||||
this.thread = null;
|
||||
this.connected = false;
|
||||
|
||||
EventEmitter.call(this);
|
||||
}
|
||||
|
||||
Emulator.prototype = {
|
||||
start: function (){
|
||||
util.inherits(Emulator, EventEmitter);
|
||||
|
||||
Emulator.prototype.start = function (){
|
||||
var context = this;
|
||||
|
||||
this.thread = spawn(this.task.command, {
|
||||
@ -27,31 +32,34 @@ Emulator.prototype = {
|
||||
cwd: this.task.cwd
|
||||
});
|
||||
|
||||
this.thread.stderr.on('data', function (){
|
||||
context.stop();
|
||||
this.thread.stdout.on('data', function (chunk){
|
||||
context.emit('data', chunk);
|
||||
});
|
||||
|
||||
this.thread.on('close', function (){
|
||||
this.thread.stderr.on('data', function (chunk){
|
||||
context.stop();
|
||||
context.emit('error', chunk);
|
||||
});
|
||||
|
||||
this.connected = true;
|
||||
|
||||
return this.thread;
|
||||
},
|
||||
stop: function (){
|
||||
if (this.thread) {
|
||||
var context = this;
|
||||
|
||||
threadKill(this.thread.pid, function (){
|
||||
this.thread.on('close', function (signal){
|
||||
['stdin', 'stdout', 'stderr'].forEach(function (stream){
|
||||
context.thread[stream].removeAllListeners();
|
||||
});
|
||||
|
||||
context.thread = null;
|
||||
context.connected = false;
|
||||
|
||||
context.emit('close', signal);
|
||||
});
|
||||
}
|
||||
|
||||
this.connected = true;
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Emulator.prototype.stop = function (){
|
||||
if (this.thread) {
|
||||
threadKill(this.thread.pid);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -35,22 +35,22 @@ module.exports = {
|
||||
command: project.command.value
|
||||
});
|
||||
|
||||
var stream = thread.start();
|
||||
|
||||
stream.stdout.on('data', function (data){
|
||||
thread.on('data', function (data){
|
||||
event.sender.send('emulator', 'data', project, data.toString());
|
||||
});
|
||||
|
||||
stream.stderr.on('data', function (error){
|
||||
thread.on('error', function (error){
|
||||
event.sender.send('emulator', 'error', project, error.toString());
|
||||
});
|
||||
|
||||
stream.on('close', function (signal){
|
||||
thread.on('close', function (signal){
|
||||
event.sender.send('emulator', 'close', project, signal.toString());
|
||||
|
||||
delete threads[project.name];
|
||||
});
|
||||
|
||||
thread.start();
|
||||
|
||||
threads[project.name] = thread;
|
||||
} else {
|
||||
thread.stop();
|
||||
|
Loading…
x
Reference in New Issue
Block a user