invoke<T extends GeneratedMessage> method
Future<T>
invoke<T extends GeneratedMessage>(
- ClientContext? ctx,
- String serviceName,
- String methodName,
- GeneratedMessage request,
- T emptyResponse,
override
Sends a request to a server and returns the reply.
The implementation should serialize the request as binary or JSON, as
appropriate. It should merge the reply into emptyResponse
and
return it.
Implementation
@override
Future<T> invoke<T extends GeneratedMessage>(
ClientContext? ctx,
String serviceName,
String methodName,
GeneratedMessage request,
T emptyResponse) async {
ClientChannel channel = ClientChannel(
host,
port: port,
options: ChannelOptions(
credentials: channelCredentials,
),
);
ClientMethod<GeneratedMessage, GeneratedMessage?> clientMethod =
ClientMethod(
'/api.Dgraph/$methodName',
(GeneratedMessage value) {
List<int> list = List.from(
value.writeToBuffer(),
);
return list;
},
(List<int> value) {
GeneratedMessage? generatedMessage;
switch (methodName) {
case "Query":
generatedMessage = api.Response.fromBuffer(value);
break;
case "Mutate":
generatedMessage = api.Response.fromBuffer(value);
break;
case "Alter":
generatedMessage = api.Payload.fromBuffer(value);
break;
case "CommitOrAbort":
generatedMessage = api.TxnContext.fromBuffer(value);
break;
case "CheckVersion":
generatedMessage = api.Version.fromBuffer(value);
break;
}
return generatedMessage;
},
);
StreamController<GeneratedMessage> streamController =
StreamController<GeneratedMessage>();
streamController.sink.add(request);
CallOptions callOptions = CallOptions(timeout: Duration(seconds: 3));
ClientCall<GeneratedMessage, GeneratedMessage?> clientCall =
channel.createCall(clientMethod, streamController.stream, callOptions);
GeneratedMessage? response = await clientCall.response.first;
emptyResponse = response as T;
return emptyResponse;
}