-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
58 lines (51 loc) · 2.48 KB
/
app.js
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
#!/usr/bin/env node
'use strict';
// external classes
const RicpaClient = require('ricpa-client');
const QueueProcessor = require('fen-queue-processor');
// internal classes
const ExternalEvaluation = require('./app/analysis/external-evaluation');
const QueueProcessingStrategy = require('./app/analysis/queue-processing-strategy');
const RequestProcessor = require('./app/request-processor');
// internal modules
const analyzer = require('./app/analysis/analyzer');
const baseManager = require('./app/chessbase/base-manager');
const config = require('./app/config');
const depthSelector = require('./app/analysis/depth-selector');
const evaluation = require('./app/chessbase/evaluation');
const pgnAnalyzer = require('./app/analysis/pgn-analyzer');
const queue = require('./app/analysis/analysis-queue');
const synchronizer = require('./app/analysis/synchronizer');
const usageStatistics = require('./app/usage-statistics');
const usageStatisticsSynchronizer = require('./app/usage-statistics-synchronizer');
const api = require('./app/api');
try {
depthSelector.setDefaultDepth(config.defaultDepth);
pgnAnalyzer.setMovesLimit(config.movesToStore);
baseManager.readBase();
baseManager.index();
const ricpaClient = config.ricpaClient ? new RicpaClient(config.ricpaClient) : null;
const externalEvaluations = new ExternalEvaluation(config.externalEvaluationsFile);
const evaluationSources = [externalEvaluations, baseManager];
if (ricpaClient) evaluationSources.push(ricpaClient);
analyzer.setSettings({ricpaClient, pingUrl: config.pingUrl});
const queueProcessor = new QueueProcessor({queue, evaluation, evaluationSources,
analyzer,
strategy: new QueueProcessingStrategy({pgnAnalyzer, baseProvider: baseManager})});
usageStatistics.load(usageStatisticsSynchronizer);
const requestProcessor = new RequestProcessor({baseManager, queueProcessor, usageStatistics, analyzer});
queue.load(synchronizer.loadQueue(config.analysisQueueFile, [[],[],[],[]]));
queue.on('change', (content) => synchronizer.saveQueue(config.analysisQueueFile, content));
api.register(requestProcessor, config.port);
const onEmpty = () => {
console.log('queue is empty');
baseManager.optimize({settings: config.optimizeSettings}).then(() => {
return queueProcessor.process();
}).catch(err => console.error(err));
};
queue.on('empty', onEmpty);
onEmpty();
console.log(`Chegura is ready to process requests on ${config.port} port`);
} catch (err) {
console.error('Unexpected error: ', err);
}