Jelajahi Sumber

No longer flush PipeStream after every write., allowing us to eliminate polling with a sleep between each poll. Fixes #21.

Always use ServiceFactory to create PipeStream instances.
drieseng 9 tahun lalu
induk
melakukan
aa332344a9
2 mengubah file dengan 12 tambahan dan 48 penghapusan
  1. 7 27
      src/Renci.SshNet/ScpClient.NET.cs
  2. 5 21
      src/Renci.SshNet/ScpClient.cs

+ 7 - 27
src/Renci.SshNet/ScpClient.NET.cs

@@ -31,12 +31,7 @@ namespace Renci.SshNet
             using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 if (!channel.SendExecRequest(string.Format("scp -t \"{0}\"", path)))
@@ -64,15 +59,10 @@ namespace Renci.SshNet
             if (string.IsNullOrEmpty(path))
                 throw new ArgumentException("path");
 
-            using (var input = new PipeStream())
+            using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 //  Send channel command request
@@ -106,15 +96,10 @@ namespace Renci.SshNet
             if (fileInfo == null)
                 throw new ArgumentNullException("fileInfo");
 
-            using (var input = new PipeStream())
+            using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 //  Send channel command request
@@ -141,15 +126,10 @@ namespace Renci.SshNet
             if (directoryInfo == null)
                 throw new ArgumentNullException("directoryInfo");
 
-            using (var input = new PipeStream())
+            using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 //  Send channel command request

+ 5 - 21
src/Renci.SshNet/ScpClient.cs

@@ -5,7 +5,6 @@ using System.IO;
 using Renci.SshNet.Common;
 using System.Text.RegularExpressions;
 using System.Diagnostics.CodeAnalysis;
-using Renci.SshNet.Abstractions;
 
 namespace Renci.SshNet
 {
@@ -170,12 +169,7 @@ namespace Renci.SshNet
             using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 var pathEnd = path.LastIndexOfAny(new[] { '\\', '/' });
@@ -213,15 +207,10 @@ namespace Renci.SshNet
             if (destination == null)
                 throw new ArgumentNullException("destination");
 
-            using (var input = new PipeStream())
+            using (var input = ServiceFactory.CreatePipeStream())
             using (var channel = Session.CreateChannelSession())
             {
-                channel.DataReceived += delegate(object sender, ChannelDataEventArgs e)
-                {
-                    input.Write(e.Data, 0, e.Data.Length);
-                    input.Flush();
-                };
-
+                channel.DataReceived += (sender, e) => input.Write(e.Data, 0, e.Data.Length);
                 channel.Open();
 
                 //  Send channel command request
@@ -377,13 +366,8 @@ namespace Renci.SshNet
         private static int ReadByte(Stream stream)
         {
             var b = stream.ReadByte();
-
-            while (b < 0)
-            {
-                ThreadAbstraction.Sleep(100);
-                b = stream.ReadByte();
-            }
-
+            if (b == -1)
+                throw new SshException("Stream has been closed.");
             return b;
         }