XenAPI.HTTP.CopyStream C# (CSharp) Method

CopyStream() public static method

public static CopyStream ( Stream inStream, Stream outStream, DataCopiedDelegate progressDelegate, FuncBool cancellingDelegate ) : long
inStream Stream
outStream Stream
progressDelegate DataCopiedDelegate
cancellingDelegate FuncBool
return long
        public static long CopyStream(Stream inStream, Stream outStream,
            DataCopiedDelegate progressDelegate, FuncBool cancellingDelegate)
        {
            long bytesWritten = 0;
            byte[] buffer = new byte[BUFFER_SIZE];
            DateTime lastUpdate = DateTime.Now;

            while (cancellingDelegate == null || !cancellingDelegate())
            {
                int bytesRead = inStream.Read(buffer, 0, buffer.Length);
                if (bytesRead == 0)
                    break;
                outStream.Write(buffer, 0, bytesRead);
                bytesWritten += bytesRead;

                if (progressDelegate != null &&
                    DateTime.Now - lastUpdate > TimeSpan.FromMilliseconds(500))
                {
                    progressDelegate(bytesWritten);
                    lastUpdate = DateTime.Now;
                }
            }

            if (cancellingDelegate != null && cancellingDelegate())
                throw new CancelledException();

            if (progressDelegate != null)
                progressDelegate(bytesWritten);

            return bytesWritten;
        }

Usage Example

Example #1
0
        public void Save(Stream inStream, Session session)
        {
            if (session == null)
            {
                throw new IOException();
            }
            UriBuilder uri = new UriBuilder();

            uri.Scheme = Connection.UriScheme;
            uri.Host   = Connection.Hostname;
            uri.Port   = Connection.Port;
            uri.Path   = BLOB_URI;
            uri.Query  = String.Format("ref={0}&session_id={1}",
                                       opaque_ref, Uri.EscapeDataString(session.opaque_ref));

            using (Stream outStream = HTTPHelper.PUT(uri.Uri, inStream.Length, true))
            {
                HTTP.CopyStream(inStream, outStream, null, () => XenAdminConfigManager.Provider.ForcedExiting);
            }
        }