1+ var Class = require ( 'classes' ) . Class
2+ , chalk = require ( 'chalk' )
3+ , tasks = require ( 'tasks' )
4+ , debuggr = require ( 'debug' ) ( 'BackgroundTasks' ) ;
5+
6+ module . exports = Class . extend (
7+ {
8+ env : null ,
9+ taskClass : null
10+ } ,
11+ {
12+ task : null ,
13+
14+ name : null ,
15+
16+ isReady : false ,
17+
18+ setup : function ( name ) {
19+ this . name = name ;
20+ this . task = null ;
21+ this . isReady = false ;
22+ this . Class . env = require ( 'utils' ) . bootstrapEnv ( ) ;
23+ this . Class . taskClass = tasks [ this . name ] ;
24+ process . on ( 'message' , this . proxy ( 'runTask' ) ) ;
25+
26+ return [ this . Class . env . moduleLoader ] ;
27+ } ,
28+
29+ init : function ( moduleLoader ) {
30+ moduleLoader . on ( 'modulesLoaded' , this . proxy ( 'ready' ) ) ;
31+ moduleLoader . loadModules ( ) ;
32+ } ,
33+
34+ debug : function ( ) {
35+ var args = [ ] . slice . call ( arguments ) ;
36+ args [ 0 ] = chalk . yellow ( this . name + '-' + process . pid ) + ': ' + args [ 0 ] ;
37+ debuggr . apply ( debuggr , args ) ;
38+ } ,
39+
40+ ready : function ( ) {
41+ this . debug ( 'Ready...' ) ;
42+ this . processReady = true ;
43+ process . send ( { code : 'READY' } ) ;
44+ } ,
45+
46+ runTask : function ( message ) {
47+ var payload = message . payload || { } ;
48+
49+ if ( ! this . processReady ) {
50+ this . debug ( 'Process is not ready yet...' ) ;
51+ process . send ( { code : 'NOT_READY' } ) ;
52+ } else if ( this . task !== null ) {
53+ this . debug ( 'Still running previous task...' ) ;
54+ process . send ( { code : 'BUSY' } ) ;
55+ } else {
56+ this . debug ( 'Running task...' ) ;
57+ this . task = new this . Class . taskClass ( payload , this . proxy ( 'taskFinished' ) ) ;
58+ }
59+ } ,
60+
61+ taskFinished : function ( err , result ) {
62+ this . debug ( 'Finished processing' + ( err !== null && err !== undefined ? ' with error: ' + err : '' ) ) ;
63+ process . send ( { code : 'RESULT' , error : err , result : result } ) ;
64+ process . nextTick ( this . proxy ( 'clearTask' ) ) ;
65+ } ,
66+
67+ clearTask : function ( ) {
68+ this . task = null ;
69+ }
70+ } ) ;
0 commit comments