|
|
|
@ -33,10 +33,6 @@ |
|
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
|
|
|
|
|
|
var util = require('util'); |
|
|
|
|
|
|
|
|
|
var Transform = require('stream').Transform; |
|
|
|
|
|
|
|
|
|
var grpc = require('..'); |
|
|
|
|
var math = grpc.load(__dirname + '/math.proto').math; |
|
|
|
|
|
|
|
|
@ -54,12 +50,13 @@ function mathDiv(call, cb) { |
|
|
|
|
// Unary + is explicit coersion to integer
|
|
|
|
|
if (+req.divisor === 0) { |
|
|
|
|
cb(new Error('cannot divide by zero')); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
cb(null, { |
|
|
|
|
quotient: req.dividend / req.divisor, |
|
|
|
|
remainder: req.dividend % req.divisor |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Server function for Fibonacci numbers. Provides the /Math/Fib function. Reads |
|
|
|
@ -97,24 +94,19 @@ function mathSum(call, cb) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function mathDivMany(stream) { |
|
|
|
|
// Here, call is a standard duplex Node object Stream
|
|
|
|
|
util.inherits(DivTransform, Transform); |
|
|
|
|
function DivTransform() { |
|
|
|
|
var options = {objectMode: true}; |
|
|
|
|
Transform.call(this, options); |
|
|
|
|
} |
|
|
|
|
DivTransform.prototype._transform = function(div_args, encoding, callback) { |
|
|
|
|
stream.on('data', function(div_args) { |
|
|
|
|
if (+div_args.divisor === 0) { |
|
|
|
|
callback(new Error('cannot divide by zero')); |
|
|
|
|
} |
|
|
|
|
callback(null, { |
|
|
|
|
stream.emit('error', new Error('cannot divide by zero')); |
|
|
|
|
} else { |
|
|
|
|
stream.write({ |
|
|
|
|
quotient: div_args.dividend / div_args.divisor, |
|
|
|
|
remainder: div_args.dividend % div_args.divisor |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
var transform = new DivTransform(); |
|
|
|
|
stream.pipe(transform); |
|
|
|
|
transform.pipe(stream); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
stream.on('end', function() { |
|
|
|
|
stream.end(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var server = new Server({ |
|
|
|
|