/// <summary> /// /// </summary> /// <param name="asyncResult"></param> void AsyncReadResponseStreamCallback(IAsyncResult asyncResult) { var _context = asyncResult.AsyncState as ExternalActionContext; try { int _read = _context.EndReadResponseStream(asyncResult); if (0 < _read) { if (null != _context.DestinationStream) { _context.BeginWriteDestinationSteam(0, _read, x => AsyncWriteDestinationStreamCallback(x)); return; } _context.BeginReadResponseStream(0, BUFFER_SIZE, x => AsyncReadResponseStreamCallback(x)); return; } _context.Result = FtpResult.Parse(_context.Response as FtpWebResponse); _context.Dispose(); RaiseActionCompletedEvent(_context); _waitHandle.Set(); } catch (Exception ex) { HandleThrownException(_context, ex); } }
/// <summary> /// /// </summary> /// <param name="asyncResult"></param> void AsyncGetResponseCallback(IAsyncResult asyncResult) { var _context = asyncResult.AsyncState as ExternalActionContext; try { var _response = _context.EndGetResponse(asyncResult) as FtpWebResponse; if (_context.ReadToEnd) { _context.BeginReadResponseStream(0, BUFFER_SIZE, x => AsyncReadResponseStreamCallback(x)); return; } _context.Result = FtpResult.Parse(_response); _context.Dispose(); RaiseActionCompletedEvent(_context); _waitHandle.Set(); } catch (Exception ex) { HandleThrownException(_context, ex); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="ex"></param> void HandleThrownException(ExternalActionContext context, Exception ex) { context.Result = FtpResult.Parse(ex); if (null != context) { context.Dispose(); } if (null != _waitHandle) { _waitHandle.Set(); } RaiseActionFailedEvent(context); }