@@ -17,6 +17,7 @@ var InvalidActionError = scErrors.InvalidActionError;
17
17
var BrokerError = scErrors . BrokerError ;
18
18
var ProcessExitError = scErrors . ProcessExitError ;
19
19
var UnknownError = scErrors . UnknownError ;
20
+ var decycle = scErrors . decycle ;
20
21
21
22
var socketClusterSingleton = null ;
22
23
@@ -380,34 +381,56 @@ SocketCluster.prototype._logObject = function (obj, objType, time) {
380
381
this . log ( logMessage , time ) ;
381
382
} ;
382
383
383
- SocketCluster . prototype . errorHandler = function ( err , origin ) {
384
- if ( ! ( err instanceof Object ) ) {
385
- // If a string (or null...)
384
+ SocketCluster . prototype . _convertValueToUnknownError = function ( err , origin ) {
385
+ if ( err && typeof err == 'object' ) {
386
+ // If err has neither a stack or message property
387
+ // then the error message will be the JSON stringified object.
388
+ if ( ! err . message && ! err . stack ) {
389
+ var errorMessage ;
390
+ try {
391
+ errorMessage = JSON . stringify ( err ) ;
392
+ } catch ( e1 ) {
393
+ try {
394
+ errorMessage = JSON . stringify ( decycle ( err ) ) ;
395
+ } catch ( e2 ) {
396
+ errorMessage = '[object NotJSON]' ;
397
+ }
398
+ }
399
+ err = new UnknownError ( errorMessage ) ;
400
+ }
401
+ } else if ( typeof err == 'function' ) {
402
+ var errorMessage = '[function ' + ( err . name || 'anonymous' ) + ']' ;
403
+ err = new UnknownError ( errorMessage ) ;
404
+ } else if ( typeof err == 'undefined' ) {
405
+ err = new UnknownError ( 'undefined' ) ;
406
+ } else if ( err === null ) {
407
+ err = new UnknownError ( 'null' ) ;
408
+ } else {
409
+ // For number, string and boolean types.
386
410
err = new UnknownError ( err ) ;
387
- } else if ( err . stack == null ) {
388
- err . stack = err . message ;
389
411
}
412
+
413
+ err . origin = origin ;
414
+ err . time = Date . now ( ) ;
415
+
416
+ return err ;
417
+ } ;
418
+
419
+ SocketCluster . prototype . errorHandler = function ( err , origin ) {
420
+ err = this . _convertValueToUnknownError ( err , origin ) ;
421
+
390
422
var annotation = this . _errorAnnotations [ err . code ] ;
391
- if ( annotation ) {
423
+ if ( annotation && err . stack ) {
392
424
err . stack += '\n ' + this . colorText ( '!!' , 'red' ) + ' ' + annotation ;
393
425
}
394
426
395
- err . origin = origin ;
396
- err . time = Date . now ( ) ;
397
427
this . emit ( this . EVENT_FAIL , err ) ;
398
428
399
429
this . _logObject ( err , 'Error' ) ;
400
430
} ;
401
431
402
432
SocketCluster . prototype . warningHandler = function ( warning , origin ) {
403
- if ( ! ( warning instanceof Object ) ) {
404
- // If a string (or null...)
405
- warning = new UnknownError ( warning ) ;
406
- } else if ( warning . stack == null ) {
407
- warning . stack = warning . message ;
408
- }
409
- warning . origin = origin ;
410
- warning . time = Date . now ( ) ;
433
+ warning = this . _convertValueToUnknownError ( warning , origin ) ;
411
434
412
435
this . emit ( this . EVENT_WARNING , warning ) ;
413
436
@@ -416,26 +439,6 @@ SocketCluster.prototype.warningHandler = function (warning, origin) {
416
439
}
417
440
} ;
418
441
419
- SocketCluster . prototype . triggerInfo = function ( info , origin ) {
420
- if ( this . _active ) {
421
- if ( ! ( origin instanceof Object ) ) {
422
- origin = {
423
- type : origin
424
- } ;
425
- }
426
- var infoData = {
427
- origin : origin ,
428
- message : info ,
429
- time : Date . now ( )
430
- } ;
431
- this . emit ( this . EVENT_WARNING , infoData ) ;
432
-
433
- if ( this . options . logLevel > 0 ) {
434
- this . _logObject ( infoData , 'Info' , infoData . time )
435
- }
436
- }
437
- } ;
438
-
439
442
SocketCluster . prototype . _workerClusterErrorHandler = function ( pid , error ) {
440
443
this . errorHandler ( error , {
441
444
type : 'WorkerCluster' ,
@@ -613,11 +616,10 @@ SocketCluster.prototype._launchWorkerCluster = function () {
613
616
614
617
this . workerCluster . on ( 'message' , function workerHandler ( m ) {
615
618
if ( m . type == 'error' ) {
616
- var error = scErrors . hydrateError ( m . data . error ) ;
617
619
if ( m . data . workerPid ) {
618
- self . _workerErrorHandler ( m . data . workerPid , error ) ;
620
+ self . _workerErrorHandler ( m . data . workerPid , m . data . error ) ;
619
621
} else {
620
- self . _workerClusterErrorHandler ( m . data . pid , error ) ;
622
+ self . _workerClusterErrorHandler ( m . data . pid , m . data . error ) ;
621
623
}
622
624
} else if ( m . type == 'warning' ) {
623
625
var warning = scErrors . hydrateError ( m . data . error ) ;
0 commit comments