423f6f41c84fcdc4b481ca1ccbcd5721b2fc708e
[archive/20170607/tools/tic.git] / server / fs / mic.js
1 'use strict';
2 /**
3  * using websocket
4  */
5
6 var fs = require('fs');
7 var path = require('path');
8 var exec = require('child_process').exec;
9 var util = require('util');
10 var JL = require('jsnlog').JL;
11 var SocketEvent = require('./socketEvent');
12
13 var logger = JL('mic.js');
14
15 var Mic = {};
16 var ps = null;
17
18 Mic.isAvailable = function () {
19     return (ps === null);
20 }
21
22 Mic.kill = function () {
23     if (ps === null) {
24         return;
25     }
26     ps.kill();
27     ps = null;
28 }
29
30 Mic.process = function (command, callback) {
31     ps = exec(command);
32     ps.stdout.on('data', callback.stdout || function (out) {
33         process.stdout.write(out);
34     });
35     ps.stderr.on('data', callback.stderr || function (err) {
36         process.stdout.write(err);
37     });
38     ps.on('error', callback.error);
39     ps.on('exit', callback.exit);
40 };
41
42 Mic.create = function (paramObj, io) {
43     logger.info('MIC Create');
44
45     var micCommand = 'sudo mic cr auto ' + paramObj.pathKsFile + util.format(' -A %s', 'x86_64') + util.format(' -o %s', paramObj.pathOutput);
46
47     function sendMsg(path, msg) {
48         io.sockets.emit(path, msg);
49     }
50
51     Mic.process(micCommand, {
52         stdout: function (out) {
53             logger.info(out);
54             sendMsg(SocketEvent.FS_IMAGE_ADD_TO, out);
55         },
56         stderr: function (out) {
57             logger.info(out);
58             sendMsg(SocketEvent.FS_IMAGE_ADD_TO, out);
59         },
60         error: function (out) {
61             logger.info(out);
62             sendMsg(SocketEvent.FS_IMAGE_ADD_TO, out);
63         },
64         exit: function (code) {
65             ps = null;
66             logger.error('Terminated (' + code + ')');
67             sendMsg(SocketEvent.FS_IMAGE_ADD_FINISH, 'Terminated (' + code + ')');
68         }
69     });
70 };
71
72 module.exports = Mic;