/// <summary>发送数据 /// </summary> public override Task <FastDFSResp> SendRequestAsync <T>(FastDFSReq <T> request) { _taskCompletionSource = new TaskCompletionSource <FastDFSResp>(); //上下文,当前的信息 _context = BuildContext <T>(request); var bodyBuffer = request.EncodeBody(Option); if (request.Header.Length == 0) { request.Header.Length = request.InputStream != null ? request.InputStream.Length + bodyBuffer.Length : bodyBuffer.Length; } var headerBuffer = request.Header.ToBytes(); var newBuffer = ByteUtil.Combine(headerBuffer, bodyBuffer); //流文件发送 if (request.InputStream != null) { _channel.WriteAsync(Unpooled.WrappedBuffer(newBuffer)); var stream = new FixChunkedStream(request.InputStream); _channel.WriteAndFlushAsync(stream); } else { _channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(newBuffer)); } return(_taskCompletionSource.Task); }
/// <summary>发送数据 /// </summary> public override async ValueTask <FastDFSResp> SendRequestAsync <T>(FastDFSReq <T> request) { if (!_channel.Active) { Logger.LogWarning("DotNetty connection, channel is inactive! {0}.", ConnectionAddress); await DisconnectAsync(); throw new Exception("Current connection is inactive!"); } _tcs = new TaskCompletionSource <FastDFSResp>(); _resp = new T(); //上下文,当前的信息 _context = BuildContext <T>(request); var bodyBuffer = request.EncodeBody(Configuration); if (request.Header.Length == 0) { request.Header.Length = request.InputStream != null ? request.InputStream.Length + bodyBuffer.Length : bodyBuffer.Length; } var headerBuffer = request.Header.ToBytes(); var newBuffer = ByteUtil.Combine(headerBuffer, bodyBuffer); //流文件发送 if (request.InputStream != null) { await _channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(newBuffer)); var stream = new FixChunkedStream(request.InputStream); await _channel.WriteAndFlushAsync(stream); } else { await _channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(newBuffer)); } return(await _tcs.Task); }