|
|
@ -224,25 +224,32 @@ function makeUnaryRequestFunction(method, serialize, deserialize) { |
|
|
|
emitter.cancel = function cancel() { |
|
|
|
emitter.cancel = function cancel() { |
|
|
|
call.cancel(); |
|
|
|
call.cancel(); |
|
|
|
}; |
|
|
|
}; |
|
|
|
var client_batch = {}; |
|
|
|
this.updateMetadata(metadata, function(error, metadata) { |
|
|
|
client_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
if (error) { |
|
|
|
client_batch[grpc.opType.SEND_MESSAGE] = serialize(argument); |
|
|
|
call.cancel(); |
|
|
|
client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true; |
|
|
|
callback(error); |
|
|
|
client_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_MESSAGE] = true; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(client_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (response.status.code != grpc.status.OK) { |
|
|
|
var client_batch = {}; |
|
|
|
callback(response.status); |
|
|
|
client_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
return; |
|
|
|
client_batch[grpc.opType.SEND_MESSAGE] = serialize(argument); |
|
|
|
} |
|
|
|
client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true; |
|
|
|
emitter.emit('status', response.status); |
|
|
|
client_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
emitter.emit('metadata', response.metadata); |
|
|
|
client_batch[grpc.opType.RECV_MESSAGE] = true; |
|
|
|
callback(null, deserialize(response.read)); |
|
|
|
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(client_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (response.status.code != grpc.status.OK) { |
|
|
|
|
|
|
|
callback(response.status); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
emitter.emit('status', response.status); |
|
|
|
|
|
|
|
emitter.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
callback(null, deserialize(response.read)); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return emitter; |
|
|
|
return emitter; |
|
|
|
} |
|
|
|
} |
|
|
@ -279,30 +286,37 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) { |
|
|
|
metadata = {}; |
|
|
|
metadata = {}; |
|
|
|
} |
|
|
|
} |
|
|
|
var stream = new ClientWritableStream(call, serialize); |
|
|
|
var stream = new ClientWritableStream(call, serialize); |
|
|
|
var metadata_batch = {}; |
|
|
|
this.updateMetadata(metadata, function(error, metadata) { |
|
|
|
metadata_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
if (error) { |
|
|
|
metadata_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
call.cancel(); |
|
|
|
call.startBatch(metadata_batch, function(err, response) { |
|
|
|
callback(error); |
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var client_batch = {}; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_MESSAGE] = true; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(client_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (response.status.code != grpc.status.OK) { |
|
|
|
|
|
|
|
callback(response.status); |
|
|
|
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
stream.emit('status', response.status); |
|
|
|
var metadata_batch = {}; |
|
|
|
callback(null, deserialize(response.read)); |
|
|
|
metadata_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
|
|
|
|
metadata_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
|
|
|
|
call.startBatch(metadata_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var client_batch = {}; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_MESSAGE] = true; |
|
|
|
|
|
|
|
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(client_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
callback(err); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (response.status.code != grpc.status.OK) { |
|
|
|
|
|
|
|
callback(response.status); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('status', response.status); |
|
|
|
|
|
|
|
callback(null, deserialize(response.read)); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return stream; |
|
|
|
return stream; |
|
|
|
} |
|
|
|
} |
|
|
@ -339,24 +353,31 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) { |
|
|
|
metadata = {}; |
|
|
|
metadata = {}; |
|
|
|
} |
|
|
|
} |
|
|
|
var stream = new ClientReadableStream(call, deserialize); |
|
|
|
var stream = new ClientReadableStream(call, deserialize); |
|
|
|
var start_batch = {}; |
|
|
|
this.updateMetadata(metadata, function(error, metadata) { |
|
|
|
start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
if (error) { |
|
|
|
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
call.cancel(); |
|
|
|
start_batch[grpc.opType.SEND_MESSAGE] = serialize(argument); |
|
|
|
stream.emit('error', error); |
|
|
|
start_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true; |
|
|
|
return; |
|
|
|
call.startBatch(start_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var status_batch = {}; |
|
|
|
|
|
|
|
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(status_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
stream.emit('status', response.status); |
|
|
|
var start_batch = {}; |
|
|
|
|
|
|
|
start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
|
|
|
|
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
|
|
|
|
start_batch[grpc.opType.SEND_MESSAGE] = serialize(argument); |
|
|
|
|
|
|
|
start_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(start_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var status_batch = {}; |
|
|
|
|
|
|
|
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(status_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('status', response.status); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return stream; |
|
|
|
return stream; |
|
|
|
} |
|
|
|
} |
|
|
@ -391,22 +412,29 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) { |
|
|
|
metadata = {}; |
|
|
|
metadata = {}; |
|
|
|
} |
|
|
|
} |
|
|
|
var stream = new ClientDuplexStream(call, serialize, deserialize); |
|
|
|
var stream = new ClientDuplexStream(call, serialize, deserialize); |
|
|
|
var start_batch = {}; |
|
|
|
this.updateMetadata(metadata, function(error, metadata) { |
|
|
|
start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
if (error) { |
|
|
|
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
call.cancel(); |
|
|
|
call.startBatch(start_batch, function(err, response) { |
|
|
|
stream.emit('error', error); |
|
|
|
if (err) { |
|
|
|
return; |
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var status_batch = {}; |
|
|
|
|
|
|
|
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(status_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
stream.emit('status', response.status); |
|
|
|
var start_batch = {}; |
|
|
|
|
|
|
|
start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata; |
|
|
|
|
|
|
|
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true; |
|
|
|
|
|
|
|
call.startBatch(start_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('metadata', response.metadata); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
var status_batch = {}; |
|
|
|
|
|
|
|
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true; |
|
|
|
|
|
|
|
call.startBatch(status_batch, function(err, response) { |
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
|
|
|
throw err; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
stream.emit('status', response.status); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return stream; |
|
|
|
return stream; |
|
|
|
} |
|
|
|
} |
|
|
@ -438,8 +466,17 @@ function makeClientConstructor(service) { |
|
|
|
* @constructor |
|
|
|
* @constructor |
|
|
|
* @param {string} address The address of the server to connect to |
|
|
|
* @param {string} address The address of the server to connect to |
|
|
|
* @param {Object} options Options to pass to the underlying channel |
|
|
|
* @param {Object} options Options to pass to the underlying channel |
|
|
|
|
|
|
|
* @param {function(Object, function)=} updateMetadata function to update the |
|
|
|
|
|
|
|
* metadata for each request |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
function Client(address, options) { |
|
|
|
function Client(address, options, updateMetadata) { |
|
|
|
|
|
|
|
if (updateMetadata) { |
|
|
|
|
|
|
|
this.updateMetadata = updateMetadata; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
this.updateMetadata = function(metadata, callback) { |
|
|
|
|
|
|
|
callback(null, metadata); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
this.channel = new grpc.Channel(address, options); |
|
|
|
this.channel = new grpc.Channel(address, options); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -458,11 +495,13 @@ function makeClientConstructor(service) { |
|
|
|
method_type = 'unary'; |
|
|
|
method_type = 'unary'; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Client.prototype[decapitalize(method.name)] = |
|
|
|
var serialize = common.serializeCls(method.resolvedRequestType.build()); |
|
|
|
requester_makers[method_type]( |
|
|
|
var deserialize = common.deserializeCls( |
|
|
|
prefix + capitalize(method.name), |
|
|
|
method.resolvedResponseType.build()); |
|
|
|
common.serializeCls(method.resolvedRequestType.build()), |
|
|
|
Client.prototype[decapitalize(method.name)] = requester_makers[method_type]( |
|
|
|
common.deserializeCls(method.resolvedResponseType.build())); |
|
|
|
prefix + capitalize(method.name), serialize, deserialize); |
|
|
|
|
|
|
|
Client.prototype[decapitalize(method.name)].serialize = serialize; |
|
|
|
|
|
|
|
Client.prototype[decapitalize(method.name)].deserialize = deserialize; |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
Client.service = service; |
|
|
|
Client.service = service; |
|
|
|