invoke<T extends GeneratedMessage> method

  1. @override
Future<T> invoke<T extends GeneratedMessage>(
  1. ClientContext? ctx,
  2. String serviceName,
  3. String methodName,
  4. GeneratedMessage request,
  5. 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;
}