Change to use SetPayloadLength

pull/20691/head
James Newton-King 6 years ago
parent d8d272119a
commit f4480fa8b2
No known key found for this signature in database
GPG Key ID: A66B2F456BF5526
  1. 16
      src/csharp/Grpc.Core.Api/SerializationContext.cs
  2. 10
      src/csharp/Grpc.Core.Tests/Internal/DefaultSerializationContextTest.cs
  3. 7
      src/csharp/Grpc.Core/Internal/DefaultSerializationContext.cs

@ -39,12 +39,22 @@ namespace Grpc.Core
/// <summary>
/// Gets buffer writer that can be used to write the serialized data. Once serialization is finished,
/// <c>Complete()</c> needs to be called.
/// <c>Complete()</c> needs to be called. A <c>null</c> value will be returned if serialization
/// with a buffer writer is not supported.
/// </summary>
public virtual IBufferWriter<byte> GetBufferWriter()
{
return null;
}
/// <summary>
/// Sets the payload length when writing serialized data a buffer writer. This method should be called before <c>GetBufferWriter</c>.
/// Calling this method is optional. If the payload length is not set then the length is calculated using the data written to the
/// buffer writer when <c>Complete()</c> is called.
/// </summary>
/// <param name="payloadLength">The total length of the payload in bytes.</param>
public virtual IBufferWriter<byte> GetBufferWriter(int payloadLength)
public virtual void SetPayloadLength(int payloadLength)
{
throw new NotImplementedException();
}
/// <summary>

@ -84,7 +84,7 @@ namespace Grpc.Core.Internal.Tests
var context = scope.Context;
var origPayload = GetTestBuffer(payloadSize);
var bufferWriter = context.GetBufferWriter(payloadSize);
var bufferWriter = context.GetBufferWriter();
origPayload.AsSpan().CopyTo(bufferWriter.GetSpan(payloadSize));
bufferWriter.Advance(payloadSize);
context.Complete();
@ -106,7 +106,7 @@ namespace Grpc.Core.Internal.Tests
var context = scope.Context;
var origPayload = GetTestBuffer(payloadSize);
var bufferWriter = context.GetBufferWriter(payloadSize);
var bufferWriter = context.GetBufferWriter();
origPayload.AsSpan().CopyTo(bufferWriter.GetMemory(payloadSize).Span);
bufferWriter.Advance(payloadSize);
context.Complete();
@ -131,7 +131,7 @@ namespace Grpc.Core.Internal.Tests
var context = scope.Context;
var origPayload = GetTestBuffer(payloadSize);
var bufferWriter = context.GetBufferWriter(payloadSize);
var bufferWriter = context.GetBufferWriter();
for (int offset = 0; offset < payloadSize; offset += maxSliceSize)
{
var sliceSize = Math.Min(maxSliceSize, payloadSize - offset);
@ -165,7 +165,7 @@ namespace Grpc.Core.Internal.Tests
var origPayload2 = GetTestBuffer(20);
var bufferWriter = context.GetBufferWriter(20);
var bufferWriter = context.GetBufferWriter();
origPayload2.AsSpan().CopyTo(bufferWriter.GetMemory(origPayload2.Length).Span);
bufferWriter.Advance(origPayload2.Length);
context.Complete();
@ -185,7 +185,7 @@ namespace Grpc.Core.Internal.Tests
var context = scope.Context;
context.Complete(GetTestBuffer(10));
Assert.Throws(typeof(InvalidOperationException), () => context.GetBufferWriter(10));
Assert.Throws(typeof(InvalidOperationException), () => context.GetBufferWriter());
}
}

@ -50,12 +50,17 @@ namespace Grpc.Core.Internal
/// <summary>
/// Expose serializer as buffer writer
/// </summary>
public override IBufferWriter<byte> GetBufferWriter(int payloadLength)
public override IBufferWriter<byte> GetBufferWriter()
{
GrpcPreconditions.CheckState(!isComplete);
return sliceBuffer;
}
public override void SetPayloadLength(int payloadLength)
{
// Length is calculated using the buffer writer
}
/// <summary>
/// Complete the payload written so far.
/// </summary>

Loading…
Cancel
Save