add axes in web view
[scilab.git] / scilab / node / scilab_server.js
1 var fork = require('child_process').fork;
2 var L = console.log;
3 var express = require('express');
4 var app = express();
5 var server = require('http').Server(app);
6 var io = require('socket.io')(server);
7
8 app.use(express.static('static'));
9
10 server.listen(1337);
11
12 app.get('/', function (req, res) {
13     res.sendFile(__dirname + '/static/scilab.html');
14 });
15
16 var processAlive = false;
17
18 var prcSocket;
19 io.on('connection', function (socket) {
20     //incoming connection from web users
21
22     if(processAlive === false) {
23         //start process
24         fork('./scilab_process.js'/*, [], {execArgv: ['--debug=5859']}*/);
25         processAlive = true;
26
27         var prcAddr = 'http://127.0.0.1:10002';
28         prcSocket = require('socket.io-client')(prcAddr);
29         L('dispatcher connected');
30     } else {
31         //send ready message to client
32         socket.emit('status', {data:'reconnection'});
33         prcSocket.emit('reconnection');
34     }
35
36     prcSocket.emit('imagepath', {path:__dirname + '/static/'});
37
38     prcSocket.on('command_end', function() {
39         socket.emit('command_end');
40     });
41
42     prcSocket.on('graphic_create', function(msg) {
43         //L(msg);
44         socket.emit('graphic_create', msg);
45     });
46
47     prcSocket.on('graphic_delete', function(msg) {
48         socket.emit('graphic_delete', msg);
49     });
50
51     prcSocket.on('graphic_update', function(msg) {
52         socket.emit('graphic_update', msg);
53     });
54
55     prcSocket.on('graphic_reconnection', function(msg) {
56         //L(msg);
57         socket.emit('graphic_reconnection', msg);
58     });
59
60
61     prcSocket.on('status', function(msg) {
62         if(msg.data === 'ready') {
63             //send ready message to client
64             socket.emit('status', msg);
65             //send execution of initial script to scilab
66             prcSocket.emit('command', {data:"exec(getenv('SCIFILES') + '" + "/start" + ".sce', -1);"});
67         }
68     });
69
70     prcSocket.on('connection', function(msg) {
71         L('dispatcher connected');
72     });
73
74     prcSocket.on('reconnect', function(msg) {
75         L('dispatcher reconnect');
76     });
77
78     prcSocket.on('reconnection', function(msg) {
79         L('dispatcher connected');
80     });
81
82     prcSocket.on('disconnect', function(msg) {
83         L('dispatcher disconnected');
84         prcSocket.disconnect();
85         processAlive = false;
86     });
87
88     //receive command from client
89     socket.on('command', function (msg) {
90         prcSocket.emit('command', msg);
91     });
92
93     socket.on('callback', function (msg) {
94         prcSocket.emit('callback', msg);
95     });
96
97     socket.on('closeWindow', function (msg) {
98         prcSocket.emit('closeWindow', msg);
99     });
100
101     socket.on('disconnect', function () {
102         L('User disconnected');
103         prcSocket.emit('quit');
104     });
105     
106     socket.on('force_reload', function () {
107         L('force reload');
108         prcSocket.emit('force_reload');
109         prcSocket.emit('command', {data:"exec(getenv('SCIFILES') + '" + "/start" + ".sce', -1);"});
110     });
111 });
112
113 L('Server running on port '+server.address().port);