1
+ var __extends = this . __extends || function ( d , b ) {
2
+ for ( var p in b ) if ( b . hasOwnProperty ( p ) ) d [ p ] = b [ p ] ;
3
+ function __ ( ) { this . constructor = d ; }
4
+ __ . prototype = b . prototype ;
5
+ d . prototype = new __ ( ) ;
6
+ } ;
1
7
var childprocess = require ( 'child_process' ) ;
2
8
var exec = childprocess . exec ;
3
9
var spawn = childprocess . spawn ;
@@ -9,29 +15,90 @@ function createId() {
9
15
} ) ;
10
16
}
11
17
var orphanExitCode = 100 ;
12
- var Parent = ( function ( ) {
13
- function Parent ( ) {
18
+ var RequesterResponder = ( function ( ) {
19
+ function RequesterResponder ( ) {
20
+ var _this = this ;
21
+ this . getProcess = function ( ) {
22
+ throw new Error ( 'getProcess is abstract' ) ;
23
+ return null ;
24
+ } ;
14
25
this . currentListeners = { } ;
15
- this . node = process . execPath ;
16
- this . gotENOENTonSpawnNode = false ;
26
+ this . responders = { } ;
27
+ this . processRequest = function ( m ) {
28
+ var parsed = m ;
29
+ if ( ! parsed . message || ! _this . responders [ parsed . message ] ) {
30
+ return ;
31
+ }
32
+ var message = parsed . message ;
33
+ try {
34
+ var response = _this . responders [ message ] ( parsed . data ) ;
35
+ }
36
+ catch ( err ) {
37
+ var error = { method : message , message : err . message , stack : err . stack , details : err . details || { } } ;
38
+ }
39
+ _this . getProcess ( ) . send ( {
40
+ message : message ,
41
+ id : parsed . id ,
42
+ data : response ,
43
+ error : error ,
44
+ request : false
45
+ } ) ;
46
+ } ;
17
47
}
18
- Parent . prototype . childQuery = function ( func ) {
48
+ RequesterResponder . prototype . processResponse = function ( m ) {
49
+ var parsed = m ;
50
+ if ( ! parsed . message || ! parsed . id ) {
51
+ console . log ( 'PARENT ERR: Invalid JSON data from child:' , m ) ;
52
+ }
53
+ else if ( ! this . currentListeners [ parsed . message ] || ! this . currentListeners [ parsed . message ] [ parsed . id ] ) {
54
+ console . log ( 'PARENT ERR: No one was listening:' , parsed . message , parsed . data ) ;
55
+ }
56
+ else {
57
+ if ( parsed . error ) {
58
+ this . currentListeners [ parsed . message ] [ parsed . id ] . reject ( parsed . error ) ;
59
+ }
60
+ else {
61
+ this . currentListeners [ parsed . message ] [ parsed . id ] . resolve ( parsed . data ) ;
62
+ }
63
+ delete this . currentListeners [ parsed . message ] [ parsed . id ] ;
64
+ }
65
+ } ;
66
+ RequesterResponder . prototype . childQuery = function ( func ) {
19
67
var _this = this ;
68
+ var that = this ;
20
69
return function ( data ) {
21
70
var message = func . name ;
22
- if ( ! _this . child ) {
71
+ if ( ! that . getProcess ( ) ) {
23
72
console . log ( 'PARENT ERR: no child when you tried to send :' , message ) ;
24
73
return Promise . reject ( new Error ( "No worker active to recieve message: " + message ) ) ;
25
74
}
26
- if ( ! _this . currentListeners [ message ] )
75
+ if ( ! that . currentListeners [ message ] )
27
76
_this . currentListeners [ message ] = { } ;
28
77
var id = createId ( ) ;
29
78
var defer = Promise . defer ( ) ;
30
- _this . currentListeners [ message ] [ id ] = defer ;
31
- _this . child . send ( { message : message , id : id , data : data } ) ;
79
+ that . currentListeners [ message ] [ id ] = defer ;
80
+ that . getProcess ( ) . send ( { message : message , id : id , data : data , request : true } ) ;
32
81
return defer . promise ;
33
82
} ;
34
83
} ;
84
+ RequesterResponder . prototype . addToResponders = function ( func ) {
85
+ this . responders [ func . name ] = func ;
86
+ } ;
87
+ RequesterResponder . prototype . registerAllFunctionsExportedFromAsResponders = function ( aModule ) {
88
+ var _this = this ;
89
+ Object . keys ( aModule ) . filter ( function ( funcName ) { return typeof aModule [ funcName ] == 'function' ; } ) . forEach ( function ( funcName ) { return _this . addToResponders ( aModule [ funcName ] ) ; } ) ;
90
+ } ;
91
+ return RequesterResponder ;
92
+ } ) ( ) ;
93
+ var Parent = ( function ( _super ) {
94
+ __extends ( Parent , _super ) ;
95
+ function Parent ( ) {
96
+ var _this = this ;
97
+ _super . apply ( this , arguments ) ;
98
+ this . node = process . execPath ;
99
+ this . gotENOENTonSpawnNode = false ;
100
+ this . getProcess = function ( ) { return _this . child ; } ;
101
+ }
35
102
Parent . prototype . startWorker = function ( childJsPath , terminalError ) {
36
103
var _this = this ;
37
104
try {
@@ -45,7 +112,14 @@ var Parent = (function () {
45
112
console . log ( 'CHILD ERR ONERROR:' , err . message , err . stack , err ) ;
46
113
_this . child = null ;
47
114
} ) ;
48
- this . child . on ( 'message' , function ( resp ) { return _this . processResponse ( resp ) ; } ) ;
115
+ this . child . on ( 'message' , function ( message ) {
116
+ if ( message . request ) {
117
+ _this . processRequest ( message ) ;
118
+ }
119
+ else {
120
+ _this . processResponse ( message ) ;
121
+ }
122
+ } ) ;
49
123
this . child . stderr . on ( 'data' , function ( err ) {
50
124
console . log ( "CHILD ERR STDERR:" , err . toString ( ) ) ;
51
125
} ) ;
@@ -79,34 +153,23 @@ var Parent = (function () {
79
153
}
80
154
this . child = null ;
81
155
} ;
82
- Parent . prototype . processResponse = function ( m ) {
83
- var parsed = m ;
84
- if ( ! parsed . message || ! parsed . id ) {
85
- console . log ( 'PARENT ERR: Invalid JSON data from child:' , m ) ;
86
- }
87
- else if ( ! this . currentListeners [ parsed . message ] || ! this . currentListeners [ parsed . message ] [ parsed . id ] ) {
88
- console . log ( 'PARENT ERR: No one was listening:' , parsed . message , parsed . data ) ;
89
- }
90
- else {
91
- if ( parsed . error ) {
92
- this . currentListeners [ parsed . message ] [ parsed . id ] . reject ( parsed . error ) ;
93
- }
94
- else {
95
- this . currentListeners [ parsed . message ] [ parsed . id ] . resolve ( parsed . data ) ;
96
- }
97
- delete this . currentListeners [ parsed . message ] [ parsed . id ] ;
98
- }
99
- } ;
100
156
return Parent ;
101
- } ) ( ) ;
157
+ } ) ( RequesterResponder ) ;
102
158
exports . Parent = Parent ;
103
- var Child = ( function ( ) {
159
+ var Child = ( function ( _super ) {
160
+ __extends ( Child , _super ) ;
104
161
function Child ( ) {
105
162
var _this = this ;
106
- this . responders = { } ;
163
+ _super . call ( this ) ;
164
+ this . getProcess = function ( ) { return process ; } ;
107
165
this . keepAlive ( ) ;
108
- process . on ( 'message' , function ( data ) {
109
- _this . processData ( data ) ;
166
+ process . on ( 'message' , function ( message ) {
167
+ if ( message . request ) {
168
+ _this . processRequest ( message ) ;
169
+ }
170
+ else {
171
+ _this . processResponse ( message ) ;
172
+ }
110
173
} ) ;
111
174
}
112
175
Child . prototype . keepAlive = function ( ) {
@@ -116,32 +179,6 @@ var Child = (function () {
116
179
}
117
180
} , 1000 ) ;
118
181
} ;
119
- Child . prototype . processData = function ( m ) {
120
- var parsed = m ;
121
- if ( ! parsed . message || ! this . responders [ parsed . message ] ) {
122
- return ;
123
- }
124
- var message = parsed . message ;
125
- try {
126
- var response = this . responders [ message ] ( parsed . data ) ;
127
- }
128
- catch ( err ) {
129
- var error = { method : message , message : err . message , stack : err . stack , details : err . details || { } } ;
130
- }
131
- process . send ( {
132
- message : message ,
133
- id : parsed . id ,
134
- data : response ,
135
- error : error
136
- } ) ;
137
- } ;
138
- Child . prototype . addToResponders = function ( func ) {
139
- this . responders [ func . name ] = func ;
140
- } ;
141
- Child . prototype . registerAllFunctionsExportedFrom = function ( aModule ) {
142
- var _this = this ;
143
- Object . keys ( aModule ) . filter ( function ( funcName ) { return typeof aModule [ funcName ] == 'function' ; } ) . forEach ( function ( funcName ) { return _this . addToResponders ( aModule [ funcName ] ) ; } ) ;
144
- } ;
145
182
return Child ;
146
- } ) ( ) ;
183
+ } ) ( RequesterResponder ) ;
147
184
exports . Child = Child ;
0 commit comments