xuxiaobo-bobo e6520392ec '...'
2024-03-18 11:14:05 +08:00

64 lines
1.1 KiB
JavaScript

/**
* Expose `Client`.
*/
module.exports = Client;
/**
* Initialize an rpc client with `sock`.
*
* @param {Socket} sock
* @api public
*/
function Client(sock) {
if (typeof sock.format === 'function') sock.format('json');
this.sock = sock;
}
/**
* Invoke method `name` with args and invoke the
* tailing callback function.
*
* @param {String} name
* @param {Mixed} ...
* @param {Function} fn
* @api public
*/
Client.prototype.call = function(name){
var args = [].slice.call(arguments, 1, -1);
var fn = arguments[arguments.length - 1];
this.sock.send({
type: 'call',
method: name,
args: args
}, function(msg){
if ('error' in msg) {
var err = new Error(msg.error);
err.stack = msg.stack || err.stack;
fn(err);
} else {
msg.args.unshift(null);
fn.apply(null, msg.args);
}
});
};
/**
* Fetch the methods exposed and invoke `fn(err, methods)`.
*
* @param {Function} fn
* @api public
*/
Client.prototype.methods = function(fn){
this.sock.send({
type: 'methods'
}, function(msg){
fn(null, msg.methods);
});
};