-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
77 lines (65 loc) · 2.25 KB
/
server.js
File metadata and controls
77 lines (65 loc) · 2.25 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
'use strict';
var Promise = require('bluebird');
var lodash = require('lodash');
var opflow = require('opflow');
var Fibonacci = require('./lib/fibonacci');
var debugx = require('debug')('fibonacci:server');
var numberMax = 50;
console.log('[+] FibonacciServer example');
var promise = opflow.Loader.instance.createServerlet({
configurer: function(body, headers, finish) {
debugx.enabled && debugx('Message: %s', body.toString());
body = JSON.parse(body.toString());
if (lodash.isNumber(body.numberMax)) {
if (body.numberMax <= 0) {
finish({ msg: 'maximum_should_be_positive_number' });
} else if (body.numberMax <= 79) {
numberMax = body.numberMax;
finish();
} else {
finish({ msg: 'maximum_number_exceeding_limit:79' });
}
} else {
finish({ msg: 'invalid_maximum_number' });
}
},
rpcWorker: [{
routineId: 'fibonacci',
handler: function(body, headers, response) {
var requestId = headers.requestId;
debugx.enabled && debugx('Request[%s] has body: %s', requestId, body);
response.emitStarted();
body = JSON.parse(body);
debugx.enabled && debugx('Request[%s] - numberMax: %s', requestId, numberMax);
if (numberMax < body.number) {
response.emitFailed({
message: 'Number exceeding limit',
numberMax: numberMax
});
return;
}
var fibonacci = new Fibonacci(body);
while(fibonacci.next()) {
var r = fibonacci.result();
debugx.enabled && debugx('Request[%s] step[%s]', requestId, r.step);
response.emitProgress(r.step, r.number);
};
debugx.enabled && debugx('Request[%s] has been finished: %s', requestId,
JSON.stringify(fibonacci.result()));
response.emitCompleted(fibonacci.result());
}
}],
subscriber: function(body, headers, finish) {
debugx.enabled && debugx('Message: %s', body.toString());
body = JSON.parse(body.toString());
if (lodash.isNumber(body.number)) {
var fibonacci = new Fibonacci(body);
var r = fibonacci.finish();
debugx.enabled && debugx('Fibonacci(%s) -> %s', r.number, r.value);
}
finish();
}
});
promise.then(function(server) {
console.log('Server is running. CTRL+C to exit!');
});