Esempio n. 1
0
        private static async Task SendWorkspace(IServerStreamWriter <RunBuildCommand> responseStream, IRunnableJob runnableJob, CancellationToken cancellationToken)
        {
            var workspacePipe = new Pipe();

            var workspaceTask = Task.Run(async() => {
                await using var stream = workspacePipe.Writer.AsStream();
                await runnableJob.WriteWorkspace(stream, cancellationToken);
            });

            await using (var stream = workspacePipe.Reader.AsStream()) {
                var buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = await stream.ReadAsync(buffer.AsMemory(), cancellationToken)) > 0)
                {
                    await responseStream.WriteAsync(new RunBuildCommand {
                        WorkspaceContent = ByteString.CopyFrom(buffer, 0, bytesRead),
                    });
                }
            }

            await workspaceTask;

            await responseStream.WriteAsync(new RunBuildCommand {
                WorkspaceEnd = new Empty(),
            });
        }
Esempio n. 2
0
        private static async Task <JobResult> ProcessBuildOutput(IAsyncStreamReader <BuildStatusUpdate> requestStream, CancellationToken cancellationToken, IRunnableJob runnableJob)
        {
            while (await requestStream.MoveNext(cancellationToken))
            {
                var update = requestStream.Current;
                switch (update.PayloadCase)
                {
                case BuildStatusUpdate.PayloadOneofCase.BuildOutput:
                    await runnableJob.JobStatus.AppendOutput(update.BuildOutput.ToByteArray(), cancellationToken);

                    break;

                case BuildStatusUpdate.PayloadOneofCase.JobFinished:
                    return(update.JobFinished);

                default:
                    throw new Exception("Unexpected update type (expected BuildOutput or JobFinished): " + update.PayloadCase);
                }
            }

            throw new Exception("Unexpected end of stream (expected BuildOutput or JobFinished)");
        }