forked from geddy/geddy
/
geddy.js
90 lines (69 loc) · 1.77 KB
/
geddy.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
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
var geddy = global.geddy || {}
, utils = require('utilities')
, pkg = require('../package');
// Set the One True Geddy Global
global.geddy = geddy;
utils.mixin(geddy, {version: pkg.version});
utils.mixin(geddy, utils);
utils.mixin(geddy, new (function () {
var _started = false;
this.start = function (options) {
var opts = options || {}
, App
, app
, config = require('./config')
, c = config.readConfig(opts);
geddy.config = c;
App = require('./app.js').App;
worker = require('../lib/cluster/worker');
w = new worker.Worker();
geddy.worker = w;
w.init({clustered: false, logger: c.logger || utils.log}, function () {
utils.mixin(geddy, w);
app = new App();
app.init(function () {
w.startServer();
utils.mixin(geddy, app);
});
});
w.configure(c);
};
this.startCluster = function (options) {
var opts = options || {}
, cluster = require('cluster')
, master
, worker
, m
, w
, App
, app;
// No repeatsies
if (_started) {
return;
}
geddy.isMaster = cluster.isMaster;
// Master-process, start workers
if (geddy.isMaster) {
master = require('../lib/cluster/master');
m = new master.Master();
m.start(opts);
}
// Worker-process, start up an app
else {
App = require('./app.js').App;
worker = require('../lib/cluster/worker');
w = new worker.Worker();
geddy.worker = w;
w.init({clustered: true}, function () {
utils.mixin(geddy, w);
app = new App();
app.init(function () {
w.startServer();
utils.mixin(geddy, app);
});
});
}
};
})());
// Also allow export/local
module.exports = geddy;