mirror of https://github.com/grpc/grpc-web.git
Merge pull request #104 from stanley-cheung/master
Add genericpbjsclient
This commit is contained in:
commit
c16c01f639
|
|
@ -0,0 +1,86 @@
|
|||
/**
|
||||
* @fileoverview A generic gRPC-Web client customized for Protobuf.js.
|
||||
*
|
||||
* (This API is experimental and subject to change.)
|
||||
*
|
||||
* @author updogliu@google.com (Zihan Liu)
|
||||
*/
|
||||
|
||||
// TODO(updogliu): add support of server streaming request.
|
||||
|
||||
goog.module('grpc.web.util.GenericPbjsClient');
|
||||
|
||||
var AbstractClientBase = goog.require('grpc.web.AbstractClientBase');
|
||||
var GatewayClientBase = goog.require('grpc.web.GatewayClientBase');
|
||||
|
||||
|
||||
/**
|
||||
* A generic gRPC-Web client customized for Protobuf.js
|
||||
*
|
||||
* @param {string} hostname The hostname of the server
|
||||
* @constructor
|
||||
* @struct
|
||||
* @final
|
||||
*/
|
||||
var GenericPbjsClient = function(hostname) {
|
||||
|
||||
/**
|
||||
* The underlying client base
|
||||
* @private @const {!GatewayClientBase}
|
||||
*/
|
||||
this.clientBase_ = new GatewayClientBase();
|
||||
|
||||
/**
|
||||
* The hostname of the server
|
||||
* @private {string}
|
||||
*/
|
||||
this.hostname_ = hostname;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get the full name (without the leading dot) of the service of the method.
|
||||
*
|
||||
* @param {!Object} method The method (a Protobuf.js Method object)
|
||||
* @return {string} The full name of the service containing the method
|
||||
*/
|
||||
function getServiceName(method) {
|
||||
var fullName = method.parent.fullName;
|
||||
if (fullName.startsWith('.')) {
|
||||
fullName = fullName.substring(1);
|
||||
}
|
||||
return fullName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param {!Object} method
|
||||
* The method to invoke (an instance of Protobuf.js Method)
|
||||
* @param {!Object} request
|
||||
* The request (an instance of Protobuf.js Message or a payload object)
|
||||
* @param {!Object<string, string>} metadata User defined call metadata
|
||||
* @param {function(?grpc.web.Error, ?Object)} callback A callback function
|
||||
* which takes (error, response)
|
||||
*/
|
||||
GenericPbjsClient.prototype.rpcCall = function(
|
||||
method, request, metadata, callback) {
|
||||
method.resolve();
|
||||
var requestType = method.resolvedRequestType;
|
||||
var responseType = method.resolvedResponseType;
|
||||
|
||||
var methodInfo = /** @type {!AbstractClientBase.MethodInfo<?, ?>} */ ({
|
||||
requestSerializeFn: function(request) {
|
||||
return requestType.encode(request).finish();
|
||||
},
|
||||
responseDeserializeFn: function(payload) {
|
||||
return responseType.decode(payload);
|
||||
}
|
||||
});
|
||||
|
||||
// Make a gRPC-Web call.
|
||||
var url = this.hostname_ + '/' + getServiceName(method) + '/' + method.name;
|
||||
this.clientBase_.rpcCall(url, request, metadata, methodInfo, callback);
|
||||
};
|
||||
|
||||
|
||||
exports = GenericPbjsClient;
|
||||
Loading…
Reference in New Issue