Exemplo n.º 1
0
 public StreamPump(Stream inputStream, Stream outputStream, StreamPumpCallback callback, int bufferSize)
 {
     buffer        = new byte[bufferSize];
     Input         = inputStream;
     Output        = outputStream;
     this.callback = callback;
     Pump();
 }
Exemplo n.º 2
0
 public StreamPump(Stream inputStream, Stream outputStream, StreamPumpCallback callback, int bufferSize)
 {
     buffer = new byte[bufferSize];
       Input = inputStream;
       Output = outputStream;
       this.callback = callback;
       Pump();
 }
Exemplo n.º 3
0
 private void Finish(StreamPumpResult result, StreamPumpCallback callback)
 {
     callback?.BeginInvoke(this, result, callback.EndInvoke, null);
     try {
         sem.Release();
     }
     catch (ObjectDisposedException) {
         // ignore
     }
     catch (Exception ex) {
         LogManager.GetLogger(typeof(StreamPump)).Error(ex.Message, ex);
     }
 }
Exemplo n.º 4
0
        public void Pump(StreamPumpCallback callback)
        {
            try
            {
                Input.BeginRead(buffer, 0, buffer.Length, readResult =>
                {
                    try
                    {
                        var read = Input.EndRead(readResult);
                        if (read <= 0)
                        {
                            Finish(StreamPumpResult.Delivered, callback);
                            return;
                        }

                        try
                        {
                            Output.BeginWrite(buffer, 0, read, writeResult =>
                            {
                                try
                                {
                                    Output.EndWrite(writeResult);
                                    Pump(callback);
                                }
                                catch (Exception)
                                {
                                    Finish(StreamPumpResult.Aborted, callback);
                                }
                            }, null);
                        }
                        catch (Exception)
                        {
                            Finish(StreamPumpResult.Aborted, callback);
                        }
                    }
                    catch (Exception)
                    {
                        Finish(StreamPumpResult.Aborted, callback);
                    }
                }, null);
            }
            catch (Exception)
            {
                Finish(StreamPumpResult.Aborted, callback);
            }
        }
Exemplo n.º 5
0
 private void Finish(StreamPumpResult result, StreamPumpCallback callback)
 {
   if (callback != null) {
     callback.BeginInvoke(this, result, ir =>
     {
       callback.EndInvoke(ir);
     }, null);
   }
   try {
     sem.Release();
   }
   catch (ObjectDisposedException) {
     // ignore
   }
   catch (Exception ex) {
     LogManager.GetLogger(typeof(StreamPump)).Error(ex.Message, ex);
   }
 }
Exemplo n.º 6
0
        private void Finish(StreamPumpResult result, StreamPumpCallback callback)
        {
            //https://stackoverflow.com/a/55516918/74071
            var task = Task.Run(() => callback(this, result));

            task.Wait();

            try
            {
                sem.Release();
            }
            catch (ObjectDisposedException)
            {
                // ignore
            }
            catch (Exception ex)
            {
                Trace.WriteLine($"StreamPump.Finish Ex [{ ex.Message }]");
            }
        }
Exemplo n.º 7
0
    public void Pump(StreamPumpCallback callback)
    {
      try {
        Input.BeginRead(buffer, 0, buffer.Length, readResult =>
        {
          try {
            var read = Input.EndRead(readResult);
            if (read <= 0) {
              Finish(StreamPumpResult.Delivered, callback);
              return;
            }

            try {
              Output.BeginWrite(buffer, 0, read, writeResult =>
              {
                try {
                  Output.EndWrite(writeResult);
                  Pump(callback);
                }
                catch (Exception) {
                  Finish(StreamPumpResult.Aborted, callback);
                }
              }, null);
            }
            catch (Exception) {
              Finish(StreamPumpResult.Aborted, callback);
            }
          }
          catch (Exception) {
            Finish(StreamPumpResult.Aborted, callback);
          }
        }, null);
      }
      catch (Exception) {
        Finish(StreamPumpResult.Aborted, callback);
      }
    }