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;
}}