2 var http = require('http');
3 var path = require('path');
4 var socketio = require('socket.io');
5 var fs = require('fs');
6 var express = require('express');
7 var bodyParser = require('body-parser');
8 var winston = require('winston');
9 var JL = require('jsnlog').JL;
10 var jsnlog_nodejs = require('jsnlog-nodejs').jsnlog_nodejs;
12 var logger = JL('app.js');
14 var server = http.createServer(app);
15 var io = socketio.listen(server);
18 var Config = require('./config.json');
19 var FileSystem = require('./server/fs/filesystem');
20 var Mic = require('./server/fs/mic');
21 var Router = require('./server/routes/router');
22 var SocketEvent = require('./server/fs/socketEvent');
25 app.set('port', process.env.PORT || Config.TIC_WEB.PORT);
26 app.use(bodyParser.json());
27 app.use(bodyParser.urlencoded({extended: true}));
28 app.use(express.static(path.join(__dirname, '/public/src'))); //module directory
29 app.use('/api', Router);
31 server.listen(app.get('port'), process.env.IP || "0.0.0.0", function () {
32 var addr = server.address();
34 // init logger(winston and jsnlog)
35 var consoleAppender = new (winston.transports.Console)();
36 var fileAppender = new winston.transports.File({ json: false, filename: Config.TIC_WEB.LOG_FILE });
37 JL().setOptions({ appenders: [ consoleAppender, fileAppender ] });
39 logger.info('Server listening at' + addr.address + ':' + addr.port);
46 * jsnlog.js on the client by default sends log messages to /jsnlog.logger, using POST.
50 app.post('*.logger', function (req, res) {
51 // Pass the log messages to the server side jsnlog.js
52 jsnlog_nodejs(JL, req.body);
54 // Send empty response. This is ok, because client side jsnlog does not use response from server.
59 * Get package data from tic-core via RESTful API
63 app.post('/analysis', function(req, res) {
64 var postData = JSON.stringify(req.body);
65 var addr = server.address();
69 port: Config.TIC_CORE.PORT || addr.port + 1,
73 'Content-Type': 'application/json',
74 'Content-Length': Buffer.byteLength(postData)
79 var ticCoreReq = http.request(options, function (ticCoreRes) {
80 ticCoreRes.setEncoding('utf8');
81 ticCoreRes.on('data', function (chunk) {
84 ticCoreRes.on('end', function () {
89 ticCoreReq.write(postData);
94 * Get ks file path from tic-core via RESTful API
98 app.post('/exports', function(req, res) {
99 var postData = JSON.stringify(req.body);
100 var addr = server.address();
104 port: Config.TIC_CORE.PORT || addr.port + 1,
108 'Content-Type': 'application/json',
109 'Content-Length': Buffer.byteLength(postData)
114 var ticCoreReq = http.request(options, function (ticCoreRes) {
115 ticCoreRes.setEncoding('utf8');
116 ticCoreRes.on('data', function (chunk) {
119 ticCoreRes.on('end', function () {
124 ticCoreReq.write(postData);
130 * FileSystem controller (read/create)
131 * Connection with MIC
133 io.on('connection', function (socket) {
134 logger.info('socket connection');
137 * SocketEvent.FS_IMAGE_LIST_FROM = 'ws/fs/image/list/from'
139 socket.on(SocketEvent.FS_IMAGE_LIST_FROM, function (data) {
140 var msgData, fileList, targetDirectory;
144 targetDirectory = data.path;
146 // get the list of file
147 fileList = FileSystem.list(targetDirectory);
150 msgData.list = fileList;
153 socket.emit(SocketEvent.FS_IMAGE_LIST_TO, msgData);
157 * SocketEvent.FS_IMAGE_ADD_FROM = 'ws/fs/image/add/from'
159 socket.on(SocketEvent.FS_IMAGE_ADD_FROM, function (data) {
160 Mic.create(data, io);
162 io.sockets.emit(SocketEvent.MIC_AVAILABLE_TO, Mic.isAvailable());
166 * SocketEvent.FS_IMAGE_ADD_KILL = 'ws/fs/image/add/kill'
168 socket.on(SocketEvent.FS_IMAGE_ADD_KILL, function () {
171 io.sockets.emit(SocketEvent.MIC_AVAILABLE_TO, Mic.isAvailable());
175 * SocketEvent.MIC_AVAILABLE_FROM = 'ws/mic/available/from'
177 socket.on(SocketEvent.MIC_AVAILABLE_FROM, function () {
178 logger.info('mic available: ' + Mic.isAvailable());
179 io.sockets.emit(SocketEvent.MIC_AVAILABLE_TO, Mic.isAvailable());
183 * SocketEvent.APP_CONFIG_FROM = 'ws/app/config/from'
185 socket.on(SocketEvent.APP_CONFIG_FROM, function () {
186 socket.emit(SocketEvent.APP_CONFIG_TO, Config);
189 socket.on('disconnect', function () {
190 logger.info('socket disconnect');