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
|
/*******************************************************************************
* Copyright (c) 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
* License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*eslint-env node*/
var api = require('./api');
var path = require('path');
var bodyParser = require('body-parser');
var express = require('express');
module.exports = function(options) {
var USE_WORKERS = options.configParams.isElectron, search;
if (USE_WORKERS) {
var requests = {};
var WORKER_COUNT = 5;
var searchWorkers = [];
var id = 0, lastWorker = 0;
var Worker = require("tiny-worker");
for (var i = 0; i < WORKER_COUNT; i++) {
var searchWorker = new Worker(path.join(__dirname, "searchWorker.js"));
searchWorker.onmessage = function (event) {
var promise = requests[event.data.id];
delete requests[event.data.id];
if (event.data.err) {
return promise.reject(event.data.err);
}
promise.fullfil(event.data.result);
};
searchWorkers.push(searchWorker);
}
search = function(originalUrl, workspaceDir, contextPath) {
return new Promise(function(fullfil, reject) {
id++;
requests[id] = {fullfil: fullfil, reject: reject};
var worker = searchWorkers[lastWorker++ % searchWorkers.length];
worker.postMessage({id: id, originalUrl: originalUrl, workspaceDir: workspaceDir, contextPath: contextPath});
});
};
} else {
search = require('./searchWorker');
}
return express.Router()
.use(bodyParser.json())
.get('*', function(req, res) {
search(req.originalUrl, req.user.workspaceDir, req.contextPath)
.then(function(result) {
res.json(result);
})
.catch (function(err) {
api.writeError(400, res, err);
});
});
};
|