示例#1
0
 private Task <PlaceFileResult> PlaceFileAsync(
     OperationContext operationContext,
     SessionContext context,
     ContentHash contentHash,
     AbsolutePath path,
     FileAccessMode accessMode,
     FileReplacementMode replacementMode,
     FileRealizationMode realizationMode)
 {
     return(PerformOperationAsync(
                context,
                _ => Client.PlaceFileAsync(
                    new PlaceFileRequest
     {
         Header = context.CreateHeader(),
         HashType = (int)contentHash.HashType,
         ContentHash = contentHash.ToByteString(),
         Path = path.Path,
         FileAccessMode = (int)accessMode,
         FileRealizationMode = (int)realizationMode,
         FileReplacementMode = (int)replacementMode
     },
                    options: GetCallOptions(Configuration.PlaceDeadline, operationContext.Token)),
                response =>
     {
         // Workaround: Handle the service returning negative result codes in error cases
         PlaceFileResult.ResultCode resultCode = response.Header.Result < 0
                 ? PlaceFileResult.ResultCode.Error
                 : (PlaceFileResult.ResultCode)response.Header.Result;
         if (!response.Header.Succeeded)
         {
             var message = string.IsNullOrEmpty(response.Header.ErrorMessage)
                     ? resultCode.ToString()
                     : response.Header.ErrorMessage;
             return new PlaceFileResult(resultCode, message, response.Header.Diagnostics);
         }
         else
         {
             return new PlaceFileResult(resultCode, response.ContentSize);
         }
     }));
 }