server.js
5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var parameters = require('./helpers/parameters');
var exec = require('child_process').exec, child;
var path = require('path');
var fs = require('fs');
var express = require('express');
var host = '0.0.0.0';
var port = 5000;
var app = express();
var ID_FROM_BD = 1;
var SERVER_IP = '150.165.204.30';
app.use(express.static(path.join(__dirname, '/videos')));
app.use(express.bodyParser({ keepExtensions: true, uploadDir: path.join(__dirname, '/uploads') }));
app.get('/', function(req, res){
res.send(200, { 'status': 'server ' + host + ':' + port + ' is running!' } );
});
app.post('/api', function(req, res){
/* Verifica se o paramêtro [servico] possui algum valor */
if (req.query.servico !== '') {
/* Verifica qual é o Tipo de Serviço fornecido */
switch(req.query.servico) {
/* Case para o Tipo de Serviço: Texto */
case 'texto':
/* Verifica se os paramêtros [transparencia, texto] possuem algum valor */
if ((req.query.transparencia !== '') && (req.query.texto !== '')) {
/* Verifica se o paramêtro [transparencia] possui os únicos valores possíveis [opaco, transparente] */
if (parameters.checkTransparency(req.query.transparencia)) {
/* Cria a linha de comando */
var command_line = 'echo ' + req.query.texto + ' >> ' + __dirname + '/text_files/' + ID_FROM_BD + ' && cd ../vlibras-core' +
' && ./gtaaas ' + parameters.getServiceType(req.query.servico) + ' ../vlibras-api/text_files/' +
ID_FROM_BD + ' ' + parameters.getTransparency(req.query.transparencia) + ' ' + ID_FROM_BD + ' WEB';
/* Executa a linha de comando */
child = exec(command_line, function(err, stdout, stderr) {
// [stdout] = vlibras-core output
// console.log(stdout);
});
/* Listener que dispara quando a requisição ao core finaliza */
child.on('close', function(code, signal){
res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.webm' });
ID_FROM_BD++;
});
/* Listener que dispara quando a requisição ao core da erro */
child.on('error', function(code, signal){
res.send(500, parameters.errorMessage('Erro na chamada ao core'));
});
} else {
res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos'));
}
} else {
res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio'));
}
break;
case 'video':
/* Verifica se os paramêtros [transparencia, texto] possuem algum valor */
if ((req.query.posicao !== '') && (req.query.tamanho !== '') && (req.query.transparencia !== '')) {
/* Verifica se os paramêtros [linguagem, posicao, tamanho, transparencia] possuem os seus únicos valores possíveis */
if ((parameters.checkPosition(req.query.posicao) === true) && (parameters.checkSize(req.query.tamanho) === true) && (parameters.checkTransparency(req.query.transparencia) === true)) {
/* Checa se o arquivo de vídeo submetivo possui uma extensão válida */
if (parameters.checkVideo(req.files.video.name)) {
/* Cria uma pasta cujo o nome é o ID */
child = exec('mkdir ' + __dirname + '/uploads/' + ID_FROM_BD);
/* Listener que dispara quando a pasta é criada */
child.on('close', function(code, signal){
/* Move o vídeo submetido para a pasta com o seu ID correspondente */
fs.rename(req.files.video.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.video.name, function(error) {
if (error) { console.log(error); }
});
/* Cria a linha de comando */
var command_line = 'vlibras_user/vlibras-core/./gtaaas ' + parameters.getServiceType(req.query.servico) + ' uploads/' + ID_FROM_BD + '/' +
req.files.video.name + ' 1 ' + parameters.getPosition(req.query.posicao) + ' ' + parameters.getSize(req.query.tamanho) + ' ' +
parameters.getTransparency(req.query.transparencia) + ' ' + ID_FROM_BD;
/* Executa a linha de comando */
child = exec(command_line, function(err, stdout, stderr) {
// [stdout] = vlibras-core output
// console.log(stdout);
});
/* Listener que dispara quando a requisição ao core finaliza */
child.on('close', function(code, signal){
res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' });
ID_FROM_BD++;
});
/* Listener que dispara quando a requisição ao core da erro */
child.on('error', function(code, signal){
res.send(500, parameters.errorMessage('Erro na chamada ao core'));
});
});
} else {
res.send(500, parameters.errorMessage('Vídeo com Extensão Inválida'));
}
} else {
res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos'));
}
} else {
res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio'));
}
break;
/* Case para um Tipo de Serviço inválido */
default:
res.send(500, parameters.errorMessage('Tipo do serviço inválido'));
break;
}
} else {
res.send(500, parameters.errorMessage('Especifique o tipo do serviço'));
}
});
app.listen(port, host, function(){
console.log('Server running on ' + host + ':' + port);
});