Skip to content

Commit f644c06

Browse files
committed
Pass cancel and getPeer to underlying call
1 parent 2064175 commit f644c06

File tree

2 files changed

+83
-51
lines changed

2 files changed

+83
-51
lines changed

packages/grpc-native-core/src/client_interceptors.js

Lines changed: 75 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -707,59 +707,65 @@ function _getUnaryInterceptor(method_definition, channel, emitter, callback) {
707707
return function (options) {
708708
var call = common.getCall(channel, method_definition.path, options);
709709
var first_listener;
710-
return new InterceptingCall(null, {
711-
start: function (metadata, listener) {
712-
var batch = {
713-
[grpc.opType.SEND_INITIAL_METADATA]:
714-
metadata._getCoreRepresentation(),
715-
};
716-
first_listener = listener;
717-
call.startBatch(batch, function () {});
718-
},
719-
sendMessage: function(message) {
720-
var batch = {
721-
[grpc.opType.SEND_MESSAGE]: serialize(message),
722-
};
723-
call.startBatch(batch, function () {});
724-
},
725-
halfClose: function() {
726-
var batch = {
727-
[grpc.opType.SEND_CLOSE_FROM_CLIENT]: true,
728-
[grpc.opType.RECV_INITIAL_METADATA]: true,
729-
[grpc.opType.RECV_MESSAGE]: true,
730-
[grpc.opType.RECV_STATUS_ON_CLIENT]: true
731-
};
732-
call.startBatch(batch, function (err, response) {
733-
response.status.metadata = Metadata._fromCoreRepresentation(
734-
response.status.metadata);
735-
var status = response.status;
736-
var deserialized;
737-
if (status.code === constants.status.OK) {
738-
if (err) {
739-
// Got a batch error, but OK status. Something went wrong
740-
callback(err);
741-
return;
742-
} else {
743-
try {
744-
deserialized = deserialize(response.read);
745-
} catch (e) {
746-
/* Change status to indicate bad server response. This
747-
* will result in passing an error to the callback */
748-
status = {
749-
code: constants.status.INTERNAL,
750-
details: 'Failed to parse server response'
751-
};
752-
}
710+
var final_requester = {};
711+
final_requester.start = function (metadata, listener) {
712+
var batch = {
713+
[grpc.opType.SEND_INITIAL_METADATA]:
714+
metadata._getCoreRepresentation(),
715+
};
716+
first_listener = listener;
717+
call.startBatch(batch, function () { });
718+
};
719+
final_requester.sendMessage = function (message) {
720+
var batch = {
721+
[grpc.opType.SEND_MESSAGE]: serialize(message),
722+
};
723+
call.startBatch(batch, function () { });
724+
};
725+
final_requester.halfClose = function () {
726+
var batch = {
727+
[grpc.opType.SEND_CLOSE_FROM_CLIENT]: true,
728+
[grpc.opType.RECV_INITIAL_METADATA]: true,
729+
[grpc.opType.RECV_MESSAGE]: true,
730+
[grpc.opType.RECV_STATUS_ON_CLIENT]: true
731+
};
732+
call.startBatch(batch, function (err, response) {
733+
response.status.metadata = Metadata._fromCoreRepresentation(
734+
response.status.metadata);
735+
var status = response.status;
736+
var deserialized;
737+
if (status.code === constants.status.OK) {
738+
if (err) {
739+
// Got a batch error, but OK status. Something went wrong
740+
callback(err);
741+
return;
742+
} else {
743+
try {
744+
deserialized = deserialize(response.read);
745+
} catch (e) {
746+
/* Change status to indicate bad server response. This
747+
* will result in passing an error to the callback */
748+
status = {
749+
code: constants.status.INTERNAL,
750+
details: 'Failed to parse server response'
751+
};
753752
}
754753
}
755-
response.metadata =
756-
Metadata._fromCoreRepresentation(response.metadata);
757-
first_listener.onReceiveMetadata(response.metadata);
758-
first_listener.onReceiveMessage(deserialized);
759-
first_listener.onReceiveStatus(status);
760-
});
761-
}
762-
});
754+
}
755+
response.metadata =
756+
Metadata._fromCoreRepresentation(response.metadata);
757+
first_listener.onReceiveMetadata(response.metadata);
758+
first_listener.onReceiveMessage(deserialized);
759+
first_listener.onReceiveStatus(status);
760+
});
761+
};
762+
final_requester.cancel = function () {
763+
call.cancel();
764+
};
765+
final_requester.getPeer = function () {
766+
return call.getPeer();
767+
};
768+
return new InterceptingCall(null, final_requester);
763769
};
764770
}
765771

@@ -865,6 +871,12 @@ function _getClientStreamingInterceptor(method_definition, channel, emitter,
865871
};
866872
call.startBatch(batch, function () { });
867873
};
874+
final_requester.cancel = function () {
875+
call.cancel();
876+
};
877+
final_requester.getPeer = function() {
878+
return call.getPeer();
879+
};
868880
return new InterceptingCall(null, final_requester);
869881
};
870882
}
@@ -944,6 +956,12 @@ function _getServerStreamingInterceptor(method_definition, channel, emitter) {
944956
call.startBatch(recv_batch, _getStreamReadCallback(emitter, call,
945957
first_listener, deserialize));
946958
};
959+
final_requester.cancel = function() {
960+
call.cancel();
961+
};
962+
final_requester.getPeer = function() {
963+
return call.getPeer();
964+
};
947965
return new InterceptingCall(null, final_requester);
948966
};
949967
}
@@ -1041,6 +1059,12 @@ function _getBidiStreamingInterceptor(method_definition, channel, emitter) {
10411059
call.startBatch(recv_batch, _getStreamReadCallback(emitter, call,
10421060
first_listener, deserialize));
10431061
};
1062+
final_requester.cancel = function() {
1063+
call.cancel();
1064+
};
1065+
final_requester.getPeer = function() {
1066+
return call.getPeer();
1067+
};
10441068
return new InterceptingCall(null, final_requester);
10451069
};
10461070
}

packages/grpc-native-core/src/common.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,12 @@ exports.getCall = function(channel, path, options) {
289289
* @param {function} next Calls the next interceptor.
290290
*/
291291

292+
/**
293+
* @function GetPeerRequester
294+
* @param {function} next Calls the next interceptor.
295+
* @return {string}
296+
*/
297+
292298
/**
293299
* @typedef {object} grpc~Requester
294300
* @param {MetadataRequester=} start A function triggered when the call begins.
@@ -298,6 +304,8 @@ exports.getCall = function(channel, path, options) {
298304
* closes the call.
299305
* @param {CancelRequester=} cancel A function triggered when the call is
300306
* cancelled.
307+
* @param {GetPeerRequester=} getPeer A function triggered when the endpoint is
308+
* requested.
301309
*/
302310

303311
/**

0 commit comments

Comments
 (0)