コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }