예제 #1
0
        public virtual bool Write(WireMessage[] messages, bool flush = true)
        {
            ThrowIfDisposed();

            var conn = _connnection;

            if (conn == null)
            {
                return(false);
            }

            var socket = conn.Connection;

            if (!socket.IsConnected())
            {
                return(false);
            }

            using (var stream = new ChunkedStream())
            {
                if (!Write(stream, messages))
                {
                    return(false);
                }

                var buffer = ByteArrayCache.Default.Acquire();
                try
                {
                    var bufferLen = buffer.Length;

                    using (var reader = stream.NewReader(0))
                    {
                        int readLen;
                        while ((readLen = reader.Read(buffer, 0, bufferLen)) > 0)
                        {
                            Send(socket, buffer, readLen);
                        }
                    }
                }
                finally
                {
                    ByteArrayCache.Default.Release(buffer);
                }
            }
            return(true);
        }