private bool TryComputeCloudEventContentLength(CloudEventContent content, out long length) { MethodInfo methodInfo = typeof(CloudEventContent).GetMethod(nameof(TryComputeLength), BindingFlags.Instance | BindingFlags.NonPublic); length = 0; if (methodInfo is null) { return(false); } var parameters = new object[] { length }; var result = (bool)methodInfo.Invoke(content, parameters); length = (long)parameters[0]; return(result); }
/// <summary>Serialize the HTTP content to a stream as an asynchronous operation.</summary> /// <param name="stream">The target stream.</param> /// <param name="context">Information about the transport (channel binding token, for example). This parameter may be null.</param> /// <returns>The task object representing the asynchronous operation.</returns> protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context) { Guard.NotNull(stream, nameof(stream)); await EncodeStringToStreamAsync(stream, "[", cancellationToken : default); for (int i = 0, l = _contents.Count(); i < l; i++) { CloudEventContent content = _contents.ElementAt(i); await content.CopyToAsync(stream, context); bool isNotLastElement = i + 1 < l; if (isNotLastElement) { await EncodeStringToStreamAsync(stream, ",", cancellationToken : default); } } await EncodeStringToStreamAsync(stream, "]", cancellationToken : default); Headers.ContentType = MediaTypeHeaderValue.Parse(CloudEventBatchContentType); }