Status FBIDBServiceHandler::tail()

in idb_companion/Server/FBIDBServiceHandler.mm [1357:1386]


Status FBIDBServiceHandler::tail(ServerContext* context, grpc::ServerReaderWriter<idb::TailResponse, idb::TailRequest>* stream)
{@autoreleasepool{
  idb::TailRequest request;
  stream->Read(&request);
  idb::TailRequest_Start start = request.start();
  NSString *path = nsstring_from_c_string(start.path());
  NSString *container = file_container(start.container());

  FBMutableFuture<NSNull *> *finished = FBMutableFuture.future;
  id<FBDataConsumer, FBDataConsumerSync> consumer = [FBBlockDataConsumer synchronousDataConsumerWithBlock:^(NSData *data) {
    if (finished.hasCompleted) {
      return;
    }
    idb::TailResponse response;
    response.set_data(data.bytes, data.length);
    stream->Write(response);
  }];

  NSError *error = nil;
  FBFuture<NSNull *> *tailOperation = [[_commandExecutor tail:path to_consumer:consumer in_container:container] block:&error];
  if (!tailOperation) {
    return Status(grpc::StatusCode::INTERNAL, error.localizedDescription.UTF8String);
  }

  stream->Read(&request);
  [[tailOperation cancel] block:nil];
  [finished resolveWithResult:NSNull.null];

  return Status::OK;
}}